Ich habe ein seltsames Verhalten in einem Komponententest für C # festgestellt.
Gegeben folgender Code:
%Vor%Ich bekomme einen fehlgeschlagenen Test mit dem Ergebnis:
%Vor% Ich habe versucht, ToString()
auf beiden zu verwenden, indem ich CultureInfo.CurrentCulture
übergebe und DateKind für den neuen DateTime-Aufruf sowohl auf Local als auch auf UTC setze, aber ich bekomme die gleiche Art von Ergebnissen.
Warum geben diese beiden Methoden nicht das gleiche Ergebnis?
Sie sollten Daten niemals als Zeichenfolge fest codieren. Was ist der Zweck, es zu tun?
%Vor%tun Sie das stattdessen:
%Vor%DateTime.Parse verwendet standardmäßig Ihre aktuelle Kultur, um ein Datum zu erstellen. Betrachten Sie folgendes Beispiel:
%Vor%Ist es der 9. Juni oder der 6. September? Abhängig von Ihrer Maschinenkultur erhalten Sie unterschiedliche Ergebnisse. Wenn Ihre DateTime-Zeichenfolge von irgendwo kommt, können Sie die Parse-Methode zwingen, ein bestimmtes Format / eine bestimmte Kultur zu verwenden.
Wenn wir auf die Frage zurückkommen, ist das wahrscheinlich kulturabhängig.
Die Frage nimmt in dem vereinfachten Beispiel an, dass die erste Variable eine DateTime ist, wenn es sich tatsächlich um ein DateTimeOffset handelt. Die verwendeten öffentlichen Methoden, die diese Variable generiert haben, haben sich geändert, und ich vermutete fälschlicherweise, dass der Rückgabetyp immer noch eine DateTime war.
Der Grund dafür, dass sie unterschiedliche Ergebnisse liefern, ist, dass sie anders sind!
Lektion 1: Überprüfen Sie Typen, auch wenn Sie wissen, was sie sind. Lektion 2: Vereinfachen Sie nicht zu viel in SO Frage Beispielen.