2016-07-18 8 views
0

Beim Versuch, meine Ortszeit von Javascript in C# zu konvertieren, habe ich nach S/O gesucht, um einige Beispiele zu finden. Während ich einige verschiedene Ansätze dazu gefunden habe, machen alle von ihnen die letzte Zeit als 7 Stunden vor mir, was ich nicht verstehe.Warum wird die C# -DateTime 7 Stunden im Voraus analysiert?

z.B .:

var t = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).AddMilliseconds(1468877118719).ToLocalTime(); 
Console.WriteLine(t) 
7/18/2016 9:25:18 PM//<--output 

oder

var t = DateTime.Parse("2016-07-18T21:27:32.513Z"); 
Console.WriteLine(t); 
7/18/2016 9:27:32 PM//output 

auch, auch wenn ich einfach versuchen,

var now = DateTime.Now; 
Console.WriteLine(now); 
7/18/2016 9:39:55 PM//the output is 7 hours ahead. 

Kann mir jemand sagen, warum dies geschieht und wie es zu beheben?

+4

, wann immer Sie eine unerwartete Datum/Zeit-Differenz erhalten, die sich einig genaue Zahl der Stunden ist, ist es fast immer eine Zeitzone Problem. Kein Zweifel, Ihr Computer ist in UTC + 7 für die Zeitzone –

+2

Sie behandeln eine lokale Zeit als UTC-Zeit. Tun Sie das nicht (oder erhalten Sie eine UTC-Zeit statt einer lokalen Zeit als Eingabe). – Servy

+0

DateTimeKind.Utc ist dein Problem hier. Holen Sie es in Ortszeit. – ManoDestra

Antwort

1

Was Sie sehen, ist die Ausgabe des UTC-Wertes.

ändern

Console.WriteLine(t); 

zu

Console.WriteLine(t.ToLocalTime()); 

Natürlich wird dies nur einen Unterschied im zweiten Fall machen. Sie rufen zuerst ToLocalTime() in der ersten Instanz.

+0

Ich habe das versucht und die gleiche Diskrepanz bekommen. ? – spb

+0

@spb: Dann liegt das wahrscheinlich daran, dass die aktuelle Zeitzone des Codes * * UTC ist, siehe hier: [link] (https://dotnetfiddle.net/O7Ve16) – GreatAndPowerfulOz

2

Auf der Maschine, auf der Sie diese ausführen, wird die lokale Uhr auf UTC eingestellt.

Dies ist sehr häufig auf Servern und Workstations * nichts, einschließlich O X.

Verwandte Themen