2017-10-09 2 views
0

Ich bin in der US-Zeitzone. Ich versuche, folgende Daten mit C# zu analysieren. Was sollte der korrekte Wert sein, der ihnen für die folgenden Eingabedaten angezeigt werden sollte, die ich von einem anderen System empfange?Anzeige des korrekten Datetime-Werts

1.2017-10-04T16:24:55.000-04:00 

2.2017-10-04T13:14:35.000+04:00 

Danke.

+2

Es ist unklar, was Sie fragen. Einer liegt 4 Stunden vor UTC, der andere 4 Stunden zurück. Sie können sie mithilfe von [DateTime.TryParseExact] (https://msdn.microsoft.com/en-us/library/system.datetime.tryparseexact (v = vs.110) .aspx) in eine 'DateTime' konvertieren ... Wie Sie diese anzeigen, hängt davon ab, wo sich der Endbenutzer befindet. –

Antwort

0

Die empfohlene Methode hierfür ist die Verwendung einer Bibliothek wie NodaTime, wenn Sie Daten für einen Benutzer anzeigen und Zeitzonen berücksichtigen müssen. Abgesehen von UTC-Unterschieden gibt es auch regionale DSTs zu berücksichtigen und es ist ein genereller Albtraum, genau zu arbeiten, ohne eine Drittanbieter-Bibliothek zu verwenden.

1

Verwenden Sie zunächst nicht DateTime, sondern verwenden Sie (oder einen anderen NodaTime-Typ, wie @DiskJunky erwähnt). Dadurch können Sie jeden Wert mit dem angegebenen Zeitversatz analysieren/speichern.

Ihre bereitgestellten Texte sollten gut mit Standard-Parsing arbeiten:

string test1 = "2017-10-04T16:24:55.000-04:00"; 
string test2 = "2017-10-04T13:14:35.000+04:00"; 

DateTimeOffset dateTime; 
if (DateTimeOffset.TryParse(test1, CultureInfo.InvariantCulture, DateTimeStyles.None, out dateTime)) 
{ 
    Console.WriteLine("Date 1: " + dateTime); 
} 
if (DateTimeOffset.TryParse(test2, CultureInfo.InvariantCulture, DateTimeStyles.None, out dateTime)) 
{ 
    Console.WriteLine("Date 2: " + dateTime); 
} 

Wenn die Zeitwerte als DateTimeOffset analysiert sind, können Sie sie wie du zum Beispiel wollen ... konvertieren und angezeigt werden, erhalten Sie Ihre US angepasst Zeit mit dateTime.ToLocalTime() oder erhalten Sie einen leichteren internationalen austauschbaren Wert mit dateTime.ToUniversalTime().

Verwandte Themen