날짜 대 DateTime


110

이벤트 날짜가 반환되어야하는 프로그램을 작업 중입니다.

내가 찾고 있어요 Date아닌, DateTime.

날짜 만 반환하는 데이터 유형이 있습니까?

답변:


131

아니에요. DateTime날짜와 시간으로 구성된 특정 시점을 나타냅니다. 그러나 Date속성을 통해 날짜 부분을 검색 할 수 있습니다 ( DateTime시간이로 설정된 또 다른 부분 00:00:00).

그리고 당신은을 통해 개별 날짜 속성을 검색 할 수 있습니다 Day, Month하고 Year.


23

시간 부분, 시간대, 로컬 대 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

https://github.com/claycephus/csharp-date


2
감사! 유용합니다.
garfbradaz

16

불행히도 .Net BCL에는 없습니다. 날짜는 일반적으로 시간이 자정으로 설정된 DateTime 객체로 표시됩니다.

짐작할 수 있듯이 이는 Date 객체의 경우 시간대 처리가 전혀 필요하지 않더라도 주변에 모든 시간대 문제가 있음을 의미합니다.


1
DateTime 값을 날짜로 사용하는 경우 종류를 UTC로 설정합니다. 처리 할 시간대 조정이 없습니다. DateTime 날짜 = DateTime.SpecifyKind (DateTime.Today, DateTimeKind, Utc);
Suncat2000

예, date앱이 한 시간대에서만 작동 할 것이라고 100 % 확신하지 않는 한 어떤 용도로든 사용 하는 것은 나쁜 생각 이라고 경험을 통해 말할 수 있습니다 . 모든 것을 다른 이름으로 저장 datetime하면 서버의 시간대 구성이 변경 될 경우 시간대 악몽을 피할 수있는 쉬운 방법을 포함하여 두 가지 세계의 장점을 모두 얻을 수 있으며 예상하지 못한 방식으로 데이터를 쓰기 시작합니다. Datetime거기에서 당신을 구할 수 있고, date전혀 할 수 없으며 date, 잘못된 시간대 컨텍스트로 기록하기 시작하면 고치기가 엄청나게 어려울 것 입니다.
Kelsey Hannan

2
@KelseyHannan 물론 "생년월일"또는 "구매 날짜"와 같은 일을 처리하지 않는 한, 국가를 이사했다는 이유만으로 신비하게 변화하는 일을 원하지 않는 경우. 예를 들어 뉴질랜드에서 아일랜드 모기지 신청을 무작위로 처리하지 않는 경우를 예로들 수 있습니다.
Roger Willcocks 2019 년

9

래퍼 클래스를 만듭니다. 이 같은:

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당신이 원하는 것을 노출하십시오 .


4
생성자가 DateTime.Kind 를로 설정하여 DateTimeKind.Unspecified직렬화 할 때 변환하지 않고 역 직렬화되도록하는 것이 좋습니다 (시간대에 따라 날짜를 변경할 수 있음).
oatsoda 2014

1
@OffHeGoes DateTime.Kind를 DateTimeKind.Utc. 포함 된 시간대 오프셋으로 직렬화 / 역 직렬화되도록 보장하므로로 설정 하지 마십시오DateTimeKind.Unspecified ! 달력 날짜는 시간대에 관계없이 동일하므로 시스템에서 조정하지 마십시오.
Suncat2000


4

DateTime에는 날짜 부분을 분리하는 데 사용할 수 있는 Date 속성이 있습니다. 의 toString 방법은 시간 부분이 비어있는 경우에만 날짜 부분을 표시하는 좋은 일을한다.


3

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 를 반환합니다.
Serj Sagan

3

DateDataType 이 없습니다 .

그러나 DateTime.Date날짜 만 가져 오는 데 사용할 수 있습니다 .

EG

DateTime date = DateTime.Now.Date;

Date 구조가 있으며 객체는 Date 유형으로 선언 될 수 있습니다.
Kaleb Anderson

@KalebAnderson은 기본 구현 .NET에 없습니다. VB.net 날짜에 대해 이야기하고 있다면 여전히 DateTime입니다.
Nick N.

DateTime.Now.Date와 동일합니다 DateTime.Today. 이 DateTime.UtcNow세계시 (UTC)로 날짜 - 시간 값을 반환하지만, 오늘에 대한 UTC 해당 메서드 나 속성이 없습니다; DateTimeKind.UtcNow.Date적절한 표현입니다.
Suncat2000

2

시간 부분이 00:00:00 인 DateTime을 반환하고 무시할 수 있습니다. 날짜는 타임 스탬프 정수로 처리되므로 어쨌든 정수에있는 시간과 날짜를 결합하는 것이 좋습니다.


2

이를 위해 날짜를 사용해야하지만 시간 값은 무시합니다.

일반적으로 날짜는 시간이있는 DateTime입니다. 00:00:00

DateTime유형은이 .Date을 반환 재산 DateTime상기와 시간 값 세트를.


1
public class AsOfdates
{
    public string DisplayDate { get; set; }
    private DateTime TheDate;
    public DateTime DateValue 
    {
        get 
        { 
            return TheDate.Date; 
        } 

        set 
        { 
            TheDate = value; 
        } 
    }    
}

4
답변에 대한 설명을 넣으면 도움이 될 것입니다.
Guanxi

0

다음 중 하나를 시도 할 수 있습니다.

DateTime.Now.ToLongDateString();
DateTime.Now.ToShortDateString();

그러나 BCL에는 "날짜"유형이 없습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.