2009-05-27 16 views
8

Obecnie jestem w British summer time, która jest godzina UTC +1. Potwierdziłem, że mój komputer jest poprawny z następującym kodem i zwraca true.Dlaczego funkcja DateTime.Now.ToString ("u") nie działa?

System.TimeZone.CurrentTimeZone.IsDaylightSavingTime(Date.Now) 

Moje pytanie jest więc dlaczego UTC formater nie działa jak bym się spodziewał:

DateTime.Now.ToString("u") 

zwraca dokładną bieżącą datę systemową jak poniżej w formacie UTC zgodnie z oczekiwaniami, ale z Z (Zulu Time) na koniec nie +01: 00?

tj

2009-05-27 14:21:22Z 

nie

2009-05-27 14:21:22+01:00 

Czy to prawidłowe działanie?

Odpowiedz

18

MSDN stany następujące:

Reprezentuje ciąg datę i format niestandardowy czas określony przez właściwość DateTimeFormatInfo.UniversalSortableDateTimePattern. Wzorzec odzwierciedla zdefiniowany standard, a właściwość jest tylko do odczytu. Dlatego zawsze jest taka sama, niezależnie od użytej kultury lub dostarczonego dostawcy formatu. Łańcuch formatu niestandardowego to "yyyy" - "MM" - "dd HH": "mm": "ss'Z" ".

Gdy używany jest ten specyfikator formatu standardowego, operacja formatowania lub parsowania zawsze korzysta z kultury niezmienniczej.

Formatowanie nie konwertuje strefy czasowej obiektu daty i godziny. Z tego względu przed użyciem tego specyfikatora formatu aplikacja musi przekształcić datę i godzinę na uniwersalny czas koordynowany (UTC).

Należy użyć następującego kodu do konwertowania bieżącą datę na UTC przed formatowaniem go:

DateTime.UtcNow.ToString("u") 

lub

DateTime.Now.ToUniversalTime().ToString("u") 

Aby wyświetlić w formacie oczekiwany (tj 2009- 05-27 14: 21: 22 + 01: 00), należy użyć niestandardowego formatu daty:

DateTime.Now.ToString("yyyy-MM-dd HH:mm:sszzz"); 
+2

Dzięki - naprawdę powinienem przeczytać dokumentację! – John

+2

Działa to również: 'DateTime.UtcNow.ToString (" u ");' –

5

"u" to uniwersalny sortowalny wzór daty/czasu, a nie format UTC; Cytując documentation:

Reprezentuje ciąg datę i format niestandardowy czas określony przez DateTimeFormatInfo .. :: nieruchomości UniversalSortableDateTimePattern.. Wzorzec odzwierciedla zdefiniowany standard, a właściwość jest tylko do odczytu. Dlatego zawsze jest taka sama, niezależnie od użytej kultury lub dostarczonego dostawcy formatu. Łańcuch formatu niestandardowego to "yyyy" - "MM" - "dd HH": "mm": "ss'Z" ".

Gdy używany jest ten specyfikator formatu standardowego, operacja formatowania lub parsowania zawsze korzysta z kultury niezmienniczej.

Formatowanie nie konwertuje strefy czasowej obiektu daty i godziny.Z tego względu przed użyciem tego specyfikatora formatu aplikacja musi przekształcić datę i godzinę na uniwersalny czas koordynowany (UTC).

3

Musisz użyć DateTime.Now.ToUniversalTime(). ToString ("u").

Powiązane problemy