Ich habe eine WP8-App, die die aktuelle Uhrzeit an einen Webdienst sendet.
Ich erhalte die datetime-Zeichenfolge durch Aufrufen
DateTime.ToString("MM/dd/yyyy HH:mm:ss.fff")
Für die meisten Benutzer funktioniert es großartig und gibt mir die richtige Zeichenfolge wie "09/10/2013 04:04:31.415"
. Für einige Benutzer ist die resultierende Zeichenfolge jedoch so etwas wie "09/14/2013 07.20.31.371"
ein Problem in meinem Webdienst.
Liegt es an einem Problem mit dem Kulturformat? Wie kann ich sicherstellen, dass die Ergebniszeichenfolge durch einen Doppelpunkt anstelle eines Punkts getrennt ist?
c#
windows-phone-8
Eldorado
quelle
quelle
Antworten:
Ja. Ihr Benutzer muss sich in einer Kultur befinden, in der das Zeittrennzeichen ein Punkt ist. Sowohl ":" als auch "/" werden kulturspezifisch in benutzerdefinierten Datums- und Zeitformaten interpretiert .
Ich würde vorschlagen, Folgendes anzugeben
CultureInfo.InvariantCulture
:Alternativ können Sie auch die Zeit- und Datumstrennzeichen angeben:
... aber das gibt Ihnen "interessante" Ergebnisse, die Sie wahrscheinlich nicht erwarten, wenn Sie Benutzer in einer Kultur zum Laufen bringen, in der das Standardkalendersystem nicht der Gregorianische Kalender ist. Nehmen Sie zum Beispiel den folgenden Code:
Das ergibt eine Ausgabe (am 18. September 2013) von:
Ich vermute, dass Ihr Webdienst davon überrascht wäre!
Ich würde eigentlich vorschlagen, nicht nur die invariante Kultur zu verwenden, sondern auch auf ein ISO-8601-Datumsformat umzusteigen:
Dies ist ein global akzeptiertes Format - es ist auch sortierbar und macht die Reihenfolge von Monat und Tag offensichtlich. (Der 06.07.2013 könnte je nach Leserkultur als 7. Juni oder 6. Juli interpretiert werden.)
quelle
useUserOverride
Parameter auf false zu setzen, da sonst einige Benutzereinstellungen die Kultureinstellungen überschreiben können. Zum Beispiel schlage ich in Ihrem Fall vor, new zu verwendenCultureInfo("ar-SA", false)
.:
hat eine besondere Bedeutung: Es ist das Zeittrennzeichen. ( Benutzerdefinierte Zeichenfolgen für Datums- und Zeitformat ).Verwenden Sie
\
, um es zu entkommen:Oder verwenden Sie
CultureInfo.InvariantCulture
:Ich würde vorschlagen, mit dem zweiten zu gehen, da es auch
/
eine besondere Bedeutung hat (es ist das Datumstrennzeichen ), so dass Sie auch damit Probleme haben können.quelle
Sie können InvariantCulture verwenden, da sich Ihr Benutzer in einer Kultur befinden muss, in der ein Punkt anstelle eines Doppelpunkts verwendet wird:
quelle
Ich bin in letzter Zeit mit Windows 10 aus einer anderen Richtung auf dieses Problem gestoßen und fand die Antwort von @JonSkeet sehr hilfreich bei der Lösung meines Problems.
Ich habe auch einige weitere Nachforschungen mit einem Testformular angestellt und festgestellt, dass der ToString-Aufruf ("JJJJ-MM-TT HH: MM: SS") in Windows 7 und anders reagierte , wenn die aktuelle Kultur auf
"no"
oder"nb-NO"
zur Laufzeit (Thread.CurrentThread.CurrentCulture = new CultureInfo("no");
) eingestellt war Windows 10. Es gab zurück, was ich in Windows 7 und HH.mm.ss in Windows 10 erwartet hatte!Ich finde das ein bisschen gruselig! Da ich glaubte, dass eine Kultur zumindest in jeder Windows-Version eine Kultur ist.
quelle
Sie können String.Format verwenden:
quelle
Datum in Zeichenfolge konvertieren
Verwenden Sie den Namen Space
Code
quelle