Frage

Ich habe eine Zeichenfolge (Variable ist fileDate) mit Datumswerten im folgenden Format:

12.02.2011 11:58 Uhr

Jetzt möchte ich dies in ein Datum und dann in UTC-Zeit umwandeln, da ich Probleme beim Vergleichen von Datumsangaben auf verschiedenen Maschinen habe. Daher möchte ich immer alle Zeichenfolgen (die verglichen werden) in Utc_date-Werte umwandeln.*

Ich habe diesen Code unten ausprobiert, aber er hat nicht funktioniert, da ich die obige Zeichenfolge nicht in eine auf Datum und Uhrzeit basierende Zeichenfolge umwandeln kann (da sie keine Sekunden enthält).

DateTime date = Convert.ToDateTime(fileDate);
date = DateTime.SpecifyKind(date, DateTimeKind.Utc);
fileDate = date.ToString("MM/dd/yyyy hh:mm tt");

Oben funktionierte die Anzeige von FormatException nicht.Können Sie mir bitte helfen?

War es hilfreich?

Lösung

Zunächst würde ich die Verwendung empfehlen DateTime.ParseExact oder TryParseExact - Mir ist nicht klar, ob Ihre Stichprobe für den 2. Dezember oder den 12. Februar bestimmt ist.Die Angabe des Formats kann durchaus dazu führen, dass Ihr Format entfernt wird FormatException.

Das nächste Problem besteht darin, herauszufinden, mit welcher Zeitzone Sie es konvertieren möchten. Wollen Sie damit sagen, dass 11:58 eine ist? lokal Zeit in einer Zeitzone, oder es ist bereits eine UTC-Zeit?

  • Wenn es sich um eine Ortszeit in der Zeitzone des Codes handelt, der dies ausführt, können Sie Folgendes verwenden DateTimeStyles.AssumeLocal | DateTimeStyles.AdjustToUniversal um es als Teil des Parsens zu tun.
  • Wenn es bereits eine universelle Zeit ist, verwenden Sie DateTimeStyles.AssumeUniversal
  • Wenn es sich um eine Ortszeit in einer anderen Zeitzone handelt, müssen Sie verwenden TimeZoneInfo um die Konvertierung durchzuführen.

Wenn es sich um eine Ortszeit handelt, müssen Sie außerdem zwei Eckfälle berücksichtigen (vorausgesetzt, Sie verwenden eine Zeitzone, in der die Sommerzeit gilt):

  • Eine Ortszeit kann sein übersprungen aufgrund von Sommerzeitübergängen, wenn die Uhren vorwärts gehen.Wenn die Uhren also von 1 Uhr morgens auf 2 Uhr morgens springen, dann gibt es 1:30 Uhr überhaupt nicht.
  • Eine Ortszeit kann sein mehrdeutig aufgrund von Sommerzeitübergängen, wenn die Uhren zurückgestellt werden.Wenn die Uhren also von 2 Uhr morgens auf 1 Uhr morgens zurückgestellt werden, dann ist es 1:30 Uhr zweimal zu unterschiedlichen UTC-Zeiten – welches Ereignis interessiert Sie?

Sie sollten entscheiden, wie Sie mit diesen Fällen umgehen möchten, und sicherstellen, dass sie in Ihren Unit-Tests abgedeckt werden.

Eine andere Möglichkeit besteht darin, meine Datums- und Uhrzeitbibliothek zu verwenden. Noda-Zeit, wodurch die Konzepte „lokales Datum/Uhrzeit“ und „Datum/Uhrzeit in einer bestimmten Zeitzone“ (und andere) expliziter getrennt werden.

Andere Tipps

Sie sollten verwenden DateTime.ParseExact um den Wert in eine richtige DateTime-Instanz zu übertragen, und dann können Sie ihn verwenden .ToUniversalTime() um die UTC-Zeit zu erhalten (dies wäre in Bezug auf den Zeitunterschied wie auf Ihrem Server-Rechner)

Sie können Folgendes verwenden:DateTime.Now.ToUniversalTime();

Ich möchte Ihnen nicht sagen, dass Sie „DateTime.Now“ verwenden sollten, aber Sie verstehen, dass Sie als Teil des DateTime-Objekts eine Methode haben, um es in die Weltzeit umzuwandeln

http://msdn.microsoft.com/en-us/library/system.datetime.touniversaltime.aspx

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top