2017-10-06 1 views
-1

Als ich versuchte, das "2017-09-25T11:06:55+00:00" Datum Zeichenfolge mit TryParse Methode zu analysieren, erhalte ich die folgende Ausgabe:Ausgabe mit Datetime-Parsing

{9/25/2017 7:06:55 AM} 

So ist es sieht aus wie 11.00 in 07.00 Nicht sicher umgewandelt zu werden, warum passiert das? Ist es wegen +00:00?? Was muss ich tun, damit die synchrone Datetime-Ausgabe identisch ist: d. H. {9/25/2017 11:06:55 AM}?

Ich habe versucht, aktuelle Locale/Kultur und DateTime Stile. Übernehme Lokales, aber kein Glück. (Hinweis: Ich bin in der östlichen Zeitzone)

Danke.

+2

Das ist ein UTC-Zeitstempel ist, was Sie bekommen, ist wahrscheinlich Ihre Ortszeit. Es ist normalerweise am besten, alle Daten in Code und DB in UTC zu speichern und nur die lokale Zeit für die Anzeige zu verwenden. – juharr

Antwort

0

Sie verwenden die UTC-Zeitzone (+00: 00), aber Sie oder Ihr PC befinden sich offensichtlich in der Zeitzone -04: 00.

0

Wenn Sie DateTimeOffset verwenden können, dann bevorzuge ich es. Sie erhalten Zeitzone Informationen erhalten, und Sie haben Zugriff auf lokale und UTC Datetime-Eigenschaften von diesem Objekt.

 var dt = DateTimeOffset.Parse("2017-09-25T11:06:55+00:00"); 
     Console.WriteLine(dt.DateTime);   // 9-25 at 11:06 
     Console.WriteLine(dt.UtcDateTime);  // 9-25 at 11:06 
     Console.WriteLine(dt.LocalDateTime); // 9-25 at 07:06 

Wenn Sie wissen, dass Sie immer mit UTC gehen zu tun haben, können Sie analysieren nur durch wie so universelle Anpassung:

 var dt = DateTime.Parse("2017-09-25T11:06:55+00:00", CultureInfo.CurrentCulture, DateTimeStyles.AdjustToUniversal); 
     Console.WriteLine(dt); // 9-25 at 11:06 
+0

Danke Trio.No, es wird nicht immer UTC.So wird der folgende Code in Ordnung sein: DateTimeStyles styles = DateTimeStyles.AssumeLocal; const string utcIdentifier = "+00: 00"; if (date.Contains (utcIdentifier)) { styles = DateTimeStyles.AdjustToUniversal; } if (DateTime.TryParse (Datum, CultureInfo.CurrentCulture, Stile, aus retVal)) { return retVal; } – Shirish

+0

Ähnlich können Sie so etwas verwenden: var dto = DateTimeOffset.Parse ("2017-09-25T11: 06: 55 + 00: 00"); Zurück dto.Offset == TimeSpan.Zero? dto.UtcDateTime: dto.LocalDateTime; – Trioj

0

Wenn Sie es analysieren zunächst ist es der richtige Wert, es ist gerade jetzt angepasst, um in deiner Zeitzone zu sein. Sie können ihn zwingen, mit ToUniversalTime:

DateTime.Parse("2017-09-25T11:06:55+00:00").ToUniversalTime().ToString("yyyy/MM/dd HH:mm:ss tt") 

Ausgang

"2017/09/25 11:06:55 AM" 
0

Sie wollen UTC Datetime richtig zu analysieren und 2017.09.25 11.06.55 haben statt 2017.09.25 7:06:55 Uhr. + 00: 00 ist nicht korrekt im UTC-Format, Sie müssen es in "2017-09-25T11: 06: 55z" ändern.

Here is working example