2012-10-31 4 views
8

Ich habe mich nach der Konvertierung von UTC in die Bergzeit umgeschaut und habe erfolgreich die folgende Funktion gefunden, von der jeder sagt, dass sie DST berücksichtigt. Wann immer es von UTC in Mountain konvertiert wird, ist es immer -7 für den Offset (wenn es aktuell -6 sein sollte). Außer es scheint nicht zu sein. Kann mir jemand etwas Licht dazu geben oder eine Möglichkeit, DST zu berücksichtigen?Umrechnung von UTC nach US Mountain Zeit mit DST

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

Danke, Dman

+0

Ist Ihnen das Tor gezielt UTC Berg zu konvertieren oder ist es zu UTC in die Zeitzone des Clients umwandeln? –

Antwort

13

Es sieht aus wie es gibt zwei Zonen in .NET (zumindest auf meiner Windows 8-Installation), die Berg Zeit sind.

Es gibt "US Mountain Standard Time", die Sie verwenden, und die nicht DST (es ist für Arizona) - und einfache "Mountain Standard Time" die tut beobachten DST. Sie müssen also nur von der „US“ Teil loszuwerden und es wird funktionieren:

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); 
    } 
} 

Output (UK Kultur):

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

Vielen Dank! Jedes Mal, wenn ich eine Antwort von dir sehe, ist es normalerweise knallhart! Gute Arbeit und halten Sie Ihre Beiträge zu SO! – DMCApps

+1

Die "US Mountain Standard Time" -Zone ist für Arizona, das keine Sommerzeit einbaut. Überprüfen Sie die DisplayName-Eigenschaft, und Sie werden sehen. –

+0

@MattJohnson: Bearbeitet, danke. –

1

Mountain Standard Time ist noch -7. Contray zum populären Glauben, ändern wir nicht unsere Zeit, aber unsere Zeit Zone. Unsere aktuelle Zeitzone ist tatsächlich Mountain Daylight Time. Herauszufinden, Zeitzone Informationen ist .... unangenehm

+1

Leider ist es schlimmer als das - weil die Zeitzone, die ID .NET * verwendet, typischerweise die Standardzeit-ID für die gesamte Zeitzone ist. (Und nein, Sie ändern Ihre Zeitzone nicht. Eine Zeitzone deckt die gesamte Zeit ab und sie kennt Sommerzeitänderungen.) So verwende ich beispielsweise in der Standardzoneinfo/tzdb-Zeitzonendatenbank die "Europa/London "Zeitzone, die zwischen UTC und UTC + 1 wechselt. –

+0

Ich denke, er meint, dass die Region zwischen MST und MDT (beide unterschiedliche Zeitzonen) wechselt, und nicht, dass ein Programmierer zwischen Zeitzonen für dieses Gebietsschema wechseln muss. – Trevor

Verwandte Themen