wiem, że to jest stary, ale mam nadzieję, że to pomoże komuś w przyszłości.
Oto XML byłem deserializacji:
<timePeriod>1982-03-31T00:00:00+11:00</t
Po deserializacji XML I skończyć z 30 a nie 31:
Wydaje się 3rd party, które wytwarzają ten XML (którego używam) zmienia strefę czasową na +11 podczas zmiany czasu na letni i zachowuje ją jako +10, gdy nie jest to Daylight Saving (DST).
Według Jon Skeet UTC nie powinny rozważyć DST: https://stackoverflow.com/a/5495816/495455
pamiętać także dokumentację
Coding Best Practices Using DateTime in the .NET Framework:
serializer XML zawsze zakłada, że wartości DateTime są szeregowane reprezentować lokalną czas maszynowy, tak stosuje przesunięcie strefy lokalnej czasu maszyny jako część przesuniętą zakodowanego czasu XML. Kiedy deserializujemy to na inną maszynę, pierwotne przesunięcie jest odejmowane od analizowanej wartości i dodawane jest przesunięcie strefy czasowej bieżącej maszyny.
Poniższy kod pozwolił mi uzyskać datę sformatowaną jako 31, ale to nie będzie działać w 100% dla dat non Daylioght oszczędzania energii (podanych w tej paszy):
TimeZoneInfo easternZone = TimeZoneInfo.FindSystemTimeZoneById("AUS Eastern Standard Time");
DateTime easternTimeNow = TimeZoneInfo.ConvertTimeFromUtc(dataPoint.timePeriod, easternZone);
System.Diagnostics.Debug.WriteLine(easternTimeNow.ToString());
Stąd rozwiązanie jest popraw plik danych XML, aby nie wyświetlał się na przemian z UTC za pomocą UTC.
EDIT:dlaczego dane zostały wkręca się
Jak się okazuje to nie 3rd dostawcą partii zmieniając UTC z DST. Kanał XML jest tworzony przez framework Java Swing czytający SQL dB. Zwykle zalecałbym trzymanie standardowej reprezentacji XML (xsd: dateTime) - IS0 8601, ale w tym przypadku użycie łańcucha i zgrywanie wszystkiego po T działa. Zastrzeżenie, wciąż próbuję zmienić kanał, polecam NIE robić tego w PROD. Używaj na własne ryzyko !!
Czy ktoś może podać mi link dokładnie na odwrót tego pytania? (Przekazywanie DateTime z serwera .Net do klienta JavaScript) – Siddhant