5 Stimmen

Die DateTime.Parse liegt um eine Stunde daneben. Warum?

Ich habe Schwierigkeiten zu verstehen, warum der Wert einer wiederhergestellten Datum-Zeit-Zeichenfolge von ihrem Originalwert abweicht. Ich schreibe die Zeichenfolge in ein universelles Datum und eine uhrzeit (Format "u" mit einem 'z' am Ende), aber wenn sie wiederhergestellt wird, unterscheidet sie sich um eine Stunde. Ich verwende das "u", um zu verhindern, dass so etwas passiert. Kann mir jemand sagen, warum es sich unterscheidet?

Ich brauche eine gute Zeichenfolgenrepräsentation, da ich den Code in 5 verschiedenen Zeitzonen verwenden werde.

Das Programm:

using System;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            //Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.GetCultureInfoByIetfLanguageTag("es-CR");

            DateTime min = DateTime.MinValue;

            Console.Write("Min value date: ");
            Console.WriteLine(min);

            Console.Write("String:         ");
            string str = min.ToString("u");
            Console.WriteLine(str);

            DateTime dt = DateTime.Parse(str);

            Console.Write("Restored Date:  ");
            Console.WriteLine(dt);

            Console.ReadLine();

        }
    }
}

Die Ausgabe ist:

Min value date: 01/01/0001 12:00:00 a.m.

String: 0001-01-01 00:00:00Z

Restored Date: 01/01/0001 01:00:00 a.m.

Bearbeiten: Option, die Costa Rica-Kultur zu versuchen.

7voto

Brian Behm Punkte 5899

Wenn Sie den universellen DateTime-String analysieren, wird er Ihre lokale Zeitzone verwenden? Sie können die Methoden ToUniversalTime() und ToLocalTime() verwenden, um hin und her zu konvertieren. Außerdem, wenn Sie den Zeitzonenoffset nach dem "Z" platzieren, hilft Ihnen das, in die richtige Zeitzone zu konvertieren.

Brian

1voto

LaGrandMere Punkte 10177

Es gibt einen sehr interessanten Thread darüber auf bytes.com.

Es sieht so aus, als ob das 'Z' am Ende Ihres Datums zwischen UTC und CET durcheinander bringt.

In der sehr weit verbreiteten Region CET ist es jetzt (keine Sommerzeit) genau eine Stunde später als in UTC/GMT/ZULU/Militärzeit.

Ich bin mir mit diesem Thema nicht sehr sicher, daher lasse ich dich den Thread lesen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X