2012-10-31 2 views
8

나는 UTC에서 산악 시간으로 변환하는 방법을 찾고 있었으며 모두가 DST를 고려하여 다음 함수를 성공적으로 찾았습니다. UTC에서 Mountain으로 변환 할 때마다 오프셋에 대해 항상 -7입니다 (현재 -6이어야 함). 그것을 제외하고있는 것처럼 보이지 않는다. DST에 계정을 만들 수있는 방법이 있습니까?DST로 UTC에서 미국 산악 시간으로 변환

DateTime utcTime = new DateTime(createdDate.Ticks, DateTimeKind.Utc); 
DateTime mountainTime = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(utcTime, "US Mountain Standard Time"); 

덕분에, Dman

+0

특히 산에 UTC로 변환하는 목표 나가있다 UTC를 클라이언트의 시간대로 변환 하시겠습니까? –

답변

13

산속 시간대는 .NET (적어도 Windows 8 설치시)에는 2 개의 영역이있는 것처럼 보입니다.

당신이 사용하고 있고 DST (애리조나를위한 것입니다.)와 일반 "산지 표준시"를 준수하지 않는 "US Mountain Standard Time"이 있습니다. 입니다. DST를 준수합니다. 그래서 그냥 "미국"부분을 제거 할 필요가 작동합니다

using System; 

class Test 
{ 
    static void Main() 
    { 
     DateTime octoberUtc = new DateTime(2012, 10, 1, 0, 0, 0, DateTimeKind.Utc); 
     DateTime decemberUtc = new DateTime(2012, 12, 1, 0, 0, 0, DateTimeKind.Utc); 
     ConvertToMountainTime(octoberUtc); 
     ConvertToMountainTime(decemberUtc); 
    } 

    static void ConvertToMountainTime(DateTime utc) 
    { 
     DateTime mountain = TimeZoneInfo.ConvertTimeBySystemTimeZoneId 
      (utc, "Mountain Standard Time"); 

     Console.WriteLine("{0} (UTC) = {1} Mountain time", utc, mountain); 
    } 
} 

출력 (UK 문화) :

01/10/2012 00:00:00 (UTC) = 30/09/2012 18:00:00 Mountain time 
01/12/2012 00:00:00 (UTC) = 30/11/2012 17:00:00 Mountain time 
+3

고마워요! 매번 나는 존에게서 대답을 받는다. 위대한 작품과 SO에 대한 귀하의 공헌을 계속! – DMCApps

+1

"미국 산 표준 시간대"영역은 일광 절약제를 구현하지 않는 애리조나 주입니다. DisplayName 속성을 확인하면 표시됩니다. –

+0

@MattJohnson : 편집 됨, 감사합니다. –

1

산지 표준시는 여전히 -7. 우리가 시간을 바꾸지 않는다는 대중의 믿음에 비추어서, 우리의 시간은 zone입니다. 현재의 시간대는 실제로 산 일광 절약 시간입니다. 표준 시간대 정보를 파악하는 것은 .... 불쾌한 것입니다.

+1

유감스럽게도 시간대 ID .NET에서 사용하는 표준 시간대 ID는 일반적으로 전체 시간대에 해당되므로 더 나쁜 것입니다. (그리고 아니요, 시간대를 변경하지 마십시오. 한 시간대는 전체 시간을 다루며 DST 변경 사항을 알고 있습니다.) 예를 들어,보다 표준적인 zoneinfo/tzdb 시간대 데이터베이스에서는 "Europe/London "시간대는 UTC와 UTC + 1을 번갈아 나타냅니다. –

+0

그는 MST와 MDT (둘 다 다른 시간대) 사이에서 영역이 변경된다는 것을 의미하며 프로그래머가 해당 로케일의 시간대를 변경해야한다는 것을 의미하지는 않습니다. – Trevor

관련 문제