2013-08-12 1 views
2

최근에 C#을 배우기 시작하고 버그가 발견되어 추적했습니다. DateTime 오브젝트를 타임 스탬프로 변환하면 다시 DateTime 개체의 경우 결과는 DateTime과 동일하지 않습니다.DateTime을 유닉스 타임 스탬프로 변환하고 다시 다시 실행 - 결과가 동일하지 않습니다.

12/08/2013 15:43:56 
12/08/2013 15:43:56 
977 
977 
False 

가 왜이 두 객체가 동일하게 처리됩니다

은 내가 인쇄

void Main() 
{ 
    DateTime ePoch = new DateTime(1970, 1, 1, 0, 0, 0); 

    DateTime dateTime = DateTime.UtcNow; 
    TimeSpan timeSpan = (dateTime.ToUniversalTime() - ePoch); 
    double unixTimeStamp = timeSpan.TotalSeconds; 

    DateTime dateTimeConvertedBack = ePoch.AddSeconds(unixTimeStamp); 

    System.Console.WriteLine(dateTime); 
    System.Console.WriteLine(dateTimeConvertedBack); 
    System.Console.WriteLine(dateTime.Millisecond); 
    System.Console.WriteLine(dateTimeConvertedBack.Millisecond); 
    System.Console.WriteLine(dateTime == dateTimeConvertedBack); //results in false?? 
} 

을 무슨 뜻인지 나타낼 함께 조각을 넣어?

나는 DateTime에 대한 == 테스트에서 값이 아닌 참조를 비교해야한다고 확신합니다.

답변

2

이들은 동일하지 않습니다. dateTime.TicksdateTimeConvertedBack.Ticks을보십시오.

이 작동합니다 :

DateTime dateTimeConvertedBack = ePoch.AddTicks(timeSpan.Ticks); 
+0

아, 내가 실제로 비교하기 무슨 값 확신하지 못했습니다. 나는 '틱스 (Ticks)'필드를 알지 못했다. 어떻게 그것을 타임 스탬프로 변환하고 다시 반대로해서 평등을 비교할 수 있습니까? – GP89

+0

@ GP89 답변을 업데이트했습니다. –

+0

감사합니다 (+1). 'timeSpan.Ticks'는 유닉스 타임 스탬프가 아닙니다. – GP89