2010-02-18 3 views
2

다음 코드 예외로다음 DateTime/TimeZone 샘플에 어떤 문제가 있습니까?

var dateTime1 = DateTime.Now; 
var str = dateTime1.ToString("dd-MMM-yyyy HH:mm:sszzz"); 
Console.WriteLine(str); 

var dateTime2 = dateTime1.ToUniversalTime(); 
str = dateTime2.ToString("dd-MMM-yyyy HH:mm:ss"); 
Console.WriteLine(str); 

var dateTime3 = TimeZoneInfo.ConvertTimeFromUtc(dateTime2, TimeZoneInfo.Local); 
str = dateTime3.ToString("dd-MMM-yyyy HH:mm:sszzz"); 
Console.WriteLine(str); 

인쇄 :

2 월 18 2,010 09 : 07 : 06-05 : 00
2 월 18 2010 14시 7분 6초
18 2 월 2010 09 : 07 : 06-05 : 00

한편 코드 :

,567,

지문이 :

6 월 15 09 01 : 35 : 05-04 : 00
15 6 월 09 5시 35분 5초
15 6 월 09 1시 35분 : 05-04 : 00

로컬 시간대가 GMT-05 : 00이므로 마지막 줄은 15-Jun-2009 00:35-05:00 일 것으로 예상했습니다.

무엇이 여기에 있습니까?

+0

그리고 당신이 우리가 읽어 기대? 귀하의 질문에있는 코드 샘플을 읽기 가능하게 만드십시오. – Steven

+0

질문이나 의견을 확인하거나 정기적으로 받아 들여야합니다. – Kylar

답변

4

한 예로 월 (일광 절약이 꺼져있을 때), 6 월에 한 (때 일광 절약 시간이 적용됩니다.)에 UTC가 변경되지 않기 때문에

, 당신의 동안 일시간 이하로 오프셋 일광 절약. (오프셋을하면 동부 표준시/동부 일광 절약 시간대에있는 것처럼 보입니다.)

1

dateTime1이 현재 문화권 설정을 얻고 있으므로 UTC로 변환 된 후에도 현지 시간으로 되돌아갑니다.

2

날짜 시간 인스턴스는 자신들이 어떤 시간대의 개념이없는 MS help for custom date time format strings에서 :. 이러한 이유로

는 Z 형식 지정자는 날짜 시간 값을 사용하지 않는 것이 좋습니다. 대신을 DateTimeOffset을 사용

시도 :

var dateTime1 = DateTimeOffset.ParseExact("20090615013505-0400", "yyyyMMddHHmmsszzz", null); 
var str = dateTime1.ToString("dd-MMM-yyyy HH:mm:sszzz"); 
Console.WriteLine(str); 
var dateTime2 = dateTime1.ToUniversalTime(); 
str = dateTime2.ToString("dd-MMM-yyyy HH:mm:ss"); 
Console.WriteLine(str); 
var dateTime3 = dateTime2.ToLocalTime(); 
str = dateTime3.ToString("dd-MMM-yyyy HH:mm:sszzz"); 
Console.WriteLine(str); 
관련 문제