Specyfikator formatu z
służy do wyświetlania przesunięcia między czasem lokalnym a czasem UTC.
Nie ma sensu używać go z czasem UTC (ponieważ zawsze jest 0). Dlatego otrzymujesz ostrzeżenie (dzięki @HansPassant za tę uwagę).
Można:
Chcesz wydrukować czasu lokalnego i przesunięcie do UTC (który jest standardem):
var dtString = DateTime.Now.ToString(@"yyyy-MM-ddTHH\:mm\:ss.f zzz");
Albo chcesz wydrukować czas UTC i czas lokalny strefa (co jest NAPRAWDĘ nie wspólnych):
var dtString = DateTime.UtcNow.ToString(@"yyyy-MM-ddTHH\:mm\:ss.f") + " " + DateTime.Now.ToString(@"zzz");
która jest bardziej lub mniej equ ivalent do kodu (jak wyjaśniono w @JeroenMostert link):
var dtString = DateTime.UtcNow.ToString(@"yyyy-MM-ddTHH\:mm\:ss.fzzz");
Ale wynikowy ciąg jest nie norma w ogóle i prowadzić do błędnej interpretacji.
"2015-02-18T12:08:15.1 +01:00"
jest odczytywany jako czasu lokalnego i lokalnej strefy czasowej nie czas UTC i strefy czasu lokalnego.
Ponadto można znaleźć więcej informacji na temat strefy czasowej i dobrych przykładów tutaj: TimeZone.CurrentTimeZone Property
Szukały na https://msdn.microsoft.com/library/ms172213? –
To nie jest wyjątek, to tylko ostrzeżenie debuggera. Naciśnij klawisz F5, aby kontynuować.Jeśli nie chcesz go zobaczyć, użyj opcji Debug> Exceptions> Managed Debugging Assistants> odznacz opcję DateTimeInvalidLocalFormat. Trochę się martwić o wygenerowanie nonsensownego ciągu, data UTC oczywiście nie ma przesunięcia UTC. –
Dzięki @HansPassant, rozumiem. Głupia ja nie myślała o randce i offsecie UTC. – vijayp