Jaki jest prawidłowy format daty / godziny w pliku XML

98

Jakiego formatu używam dla daty / godziny podczas zapisywania do pliku XML przy użyciu platformy .NET? Czy po prostu używam DateTime.ToString(), czy muszę używać określonego formatu?

Jon B.
źródło

Odpowiedzi:

138

Zawsze używam formatu ISO 8601 (np. 2008-10-31T15:07:38.6875000-05:00) - date.ToString("o"). Jest to również format daty XSD . Jest to preferowany format i ciąg standardowego formatu daty i godziny , chociaż w razie potrzeby możesz użyć ręcznego ciągu formatu, jeśli nie chcesz, aby `` T '' między datą i godziną:date.ToString("yyyy-MM-dd HH:mm:ss");

EDYCJA: Jeśli używasz wygenerowanej klasy z XSD lub usługi sieci Web, możesz po prostu przypisać wystąpienie DateTime bezpośrednio do właściwości klasy. Jeśli piszesz tekst XML, użyj powyższego.

Ryan
źródło
44

EDYCJA: To zła rada. Użyj „o”, jak wyżej. „s” robi złą rzecz .

Zawsze używam tego:

dateTime.ToUniversalTime().ToString("s");

To jest poprawne, jeśli twój schemat wygląda tak:

<xs:element name="startdate" type="xs:dateTime"/>

Co spowodowałoby:

<startdate>2002-05-30T09:00:00</startdate>

Więcej informacji można znaleźć tutaj: http://www.w3schools.com/xml/schema_dtypes_date.asp

jonnii
źródło
10
Pamiętaj, że to konwertuje datę na UTC. Kiedy przetwarzasz datę, musisz przekonwertować ją z powrotem na aktualną strefę czasową w oparciu o ustawienia regionalne (chyba że przetwarzasz wszystko w czasie UTC). Zwykle na końcu umieszcza się „Z”, aby oznaczyć datę UTC.
Ryan
„s” działa u mnie, gdy dzwonię do usługi sieciowej .net z interfejsu mydła.
Tristan Channing
4

Jeśli ręcznie składasz ciąg XML, użyj polecenia var.ToUniversalTime().ToString("yyyy-MM-dd'T'HH:mm:ss.fffffffZ")); To wyświetli oficjalny format daty i godziny XML. Ale nie musisz martwić się o format, jeśli używasz wbudowanych metod serializacji.

chilltemp
źródło
jonnii zwróci zasadniczo ten sam wynik.
chilltemp
3
W tym przypadku wszystkie daty MUSZĄ być podane w strefie czasowej UTC, w przeciwnym razie użycie sufiksu „Z” jest nieprawidłowe.
Fr0sT
Powtórzę poprzedni komentarz - jest to właściwie niepoprawne, jeśli dt nie jest utc.
Brady Moritz
3

Co ma do powiedzenia DTD?

Jeśli plik XML służy do komunikacji z innym istniejącym oprogramowaniem (np. SOAP), sprawdź, czego oczekuje od tego oprogramowania.

Jeśli plik XML jest przeznaczony do serializacji lub komunikacji z nieistniejącym oprogramowaniem (np. Tym, który piszesz), możesz go zdefiniować. W takim przypadku zasugerowałbym coś, co jest zarówno łatwe do przeanalizowania w wybranym przez ciebie języku (językach), jak i łatwe do odczytania dla ludzi. np. jeśli Twój język (czy to VB.NET, C # .NET czy jakikolwiek inny) pozwala na łatwe analizowanie dat ISO (RRRR-MM-DD), to proponuję.

Tanktalus
źródło