답변:
시간 부분, 시간대, 로컬 대 utc 등에 대해 걱정하지 않고 간단한 날짜가 필요할 때 간단한 Date 구조체 를 만들었습니다 .
Date today = Date.Today;
Date yesterday = Date.Today.AddDays(-1);
Date independenceDay = Date.Parse("2013-07-04");
independenceDay.ToLongString(); // "Thursday, July 4, 2013"
independenceDay.ToShortString(); // "7/4/2013"
independenceDay.ToString(); // "7/4/2013"
independenceDay.ToString("s"); // "2013-07-04"
int july = independenceDay.Month; // 7
불행히도 .Net BCL에는 없습니다. 날짜는 일반적으로 시간이 자정으로 설정된 DateTime 객체로 표시됩니다.
짐작할 수 있듯이 이는 Date 객체의 경우 시간대 처리가 전혀 필요하지 않더라도 주변에 모든 시간대 문제가 있음을 의미합니다.
date앱이 한 시간대에서만 작동 할 것이라고 100 % 확신하지 않는 한 어떤 용도로든 사용 하는 것은 나쁜 생각 이라고 경험을 통해 말할 수 있습니다 . 모든 것을 다른 이름으로 저장 datetime하면 서버의 시간대 구성이 변경 될 경우 시간대 악몽을 피할 수있는 쉬운 방법을 포함하여 두 가지 세계의 장점을 모두 얻을 수 있으며 예상하지 못한 방식으로 데이터를 쓰기 시작합니다. Datetime거기에서 당신을 구할 수 있고, date전혀 할 수 없으며 date, 잘못된 시간대 컨텍스트로 기록하기 시작하면 고치기가 엄청나게 어려울 것 입니다.
래퍼 클래스를 만듭니다. 이 같은:
public class Date:IEquatable<Date>,IEquatable<DateTime>
{
public Date(DateTime date)
{
value = date.Date;
}
public bool Equals(Date other)
{
return other != null && value.Equals(other.value);
}
public bool Equals(DateTime other)
{
return value.Equals(other);
}
public override string ToString()
{
return value.ToString();
}
public static implicit operator DateTime(Date date)
{
return date.value;
}
public static explicit operator Date(DateTime dateTime)
{
return new Date(dateTime);
}
private DateTime value;
}
그리고 value당신이 원하는 것을 노출하십시오 .
DateTimeKind.Unspecified직렬화 할 때 변환하지 않고 역 직렬화되도록하는 것이 좋습니다 (시간대에 따라 날짜를 변경할 수 있음).
DateTimeKind.Utc. 포함 된 시간대 오프셋으로 직렬화 / 역 직렬화되도록 보장하므로로 설정 하지 마십시오DateTimeKind.Unspecified ! 달력 날짜는 시간대에 관계없이 동일하므로 시스템에서 조정하지 마십시오.
Date 유형은 VB.NET에서 사용하는 DateTime 유형의 별칭 일뿐입니다 (예 : int가 Integer가 됨). 두 유형 모두 시간 부분이 00:00:00으로 설정된 객체를 반환하는 Date 속성이 있습니다.
DateTime에는 날짜 부분을 분리하는 데 사용할 수 있는 Date 속성이 있습니다. 의 toString 방법은 시간 부분이 비어있는 경우에만 날짜 부분을 표시하는 좋은 일을한다.
DateTime 개체에는 값의 날짜 부분 만 반환하는 속성이 있습니다.
public static void Main()
{
System.DateTime _Now = DateAndTime.Now;
Console.WriteLine("The Date and Time is " + _Now);
//will return the date and time
Console.WriteLine("The Date Only is " + _Now.Date);
//will return only the date
Console.Write("Press any key to continue . . . ");
Console.ReadKey(true);
}
DateTime시간이 0:00:00으로 설정된 a 를 반환합니다.
DateDataType 이 없습니다 .
그러나 DateTime.Date날짜 만 가져 오는 데 사용할 수 있습니다 .
EG
DateTime date = DateTime.Now.Date;
DateTime.Now.Date와 동일합니다 DateTime.Today. 이 DateTime.UtcNow세계시 (UTC)로 날짜 - 시간 값을 반환하지만, 오늘에 대한 UTC 해당 메서드 나 속성이 없습니다; DateTimeKind.UtcNow.Date적절한 표현입니다.