Mam plik W Pythonie chciałbym poświęcić czas na jego utworzenie i przekonwertować go na ciąg czasu ISO (ISO 8601) , zachowując fakt, że został on utworzony we wschodniej strefie czasowej (ET) .
Jak mogę pobrać czas pliku i przekonwertować go na ciąg czasu ISO wskazujący wschodnią strefę czasową (i uwzględnia czas letni, jeśli to konieczne)?
Odpowiedzi:
Lokalnie zgodnie z ISO 8601:
UTC zgodnie z ISO 8601:
Lokalnie zgodnie z ISO 8601 bez mikrosekund:
UTC zgodnie z ISO 8601 z informacją o strefie czasowej (Python 3):
UTC do ISO 8601 z lokalną strefą czasową bez mikrosekund (Python 3):
Lokalnie zgodnie z ISO 8601 z informacją o strefie czasowej (Python 3):
Zauważ, że wystąpił błąd podczas korzystania
astimezone()
z czasu utc. To daje niepoprawny wynik:W przypadku Python 2 zobacz i użyj pytz .
źródło
.isoformat()
może przyjąć parametr separatora (w przypadku, gdy chcesz czegoś innego niż „T”):.isoformat(' ')
It is permitted to omit the 'T' character by mutual agreement.
Oto, czego używam do konwersji do formatu daty i godziny XSD:
Natknąłem się na to pytanie, szukając formatu daty i godziny XSD (
xs:dateTime
). Musiałem usunąć mikrosekundyisoformat
.źródło
xs:date
na myśli z arkuszy stylów XSD / XML.xs:dateTime
Reprezentacja czasu ISO 8601
Międzynarodowa norma ISO 8601 opisuje ciąg znaków dla dat i godzin. Są dwa proste przykłady tego formatu
(które oba oznaczają 16 grudnia 2010 r.), ale format pozwala również na czasy rozdzielczości poniżej sekundy i określenie stref czasowych. Ten format nie jest oczywiście specyficzny dla Pythona, ale dobrze nadaje się do przechowywania dat i godzin w formacie przenośnym. Szczegóły dotyczące tego formatu można znaleźć we wpisie Markusa Kuhna .
Polecam użycie tego formatu do przechowywania czasów w plikach.
Jednym ze sposobów uzyskania bieżącego czasu w tej reprezentacji jest użycie strftime z modułu czasu w standardowej bibliotece Pythona:
Możesz użyć konstruktora strptime klasy datetime:
Najbardziej niezawodny jest moduł Egenix mxDateTime:
Bibliografia
Dokumentacja modułu czasu Python
Dokumentacja klasy datetime Python
Klasa mxDateTime Egenix
źródło
2018-05-25
2018-05-25T12:16:14+00:00
2018-05-25T12:16:14Z
20180525T121614Z
Znalazłem datetime.isoformat w dokumentacji . Wydaje się robić, co chcesz:
źródło
ISO 8601 pozwala na kompaktową reprezentację bez żadnych separatorów, z wyjątkiem
T
, więc lubię używać tej linijki, aby uzyskać szybki ciąg znacznika czasu:Jeśli nie potrzebujesz mikrosekund, po prostu pomiń tę
.%f
część:Dla czasu lokalnego:
Edytować:
Po przeczytaniu tego trochę więcej, zalecam pozostawienie interpunkcji. RFC 3339 zaleca ten styl, ponieważ jeśli wszyscy używają interpunkcji, nie ma ryzyka, że wiele ciągów ISO 8601 zostanie posortowanych w grupach według interpunkcji. Tak więc jedna linijka dla zgodnego łańcucha to:
źródło
2019-02-23T04:02:04.051Z
znew Date().toISOString()
ISO 8601 czas nie przechowuje nazwę strefy czasowej, tylko odpowiednie przesunięcie UTC jest zachowana.
Aby przekonwertować plik ctime na ciąg czasu ISO 8601, zachowując przesunięcie UTC w Pythonie 3:
Kod zakłada, że twoją lokalną strefą czasową jest Wschodnia Strefa Czasowa (ET) i że twój system zapewnia prawidłowe przesunięcie UTC dla podanego znacznika czasu POSIX (
ts
), tj. Python ma dostęp do historycznej bazy danych stref czasowych w twoim systemie lub strefa czasowa miała te same zasady w danym dniu.Jeśli potrzebujesz przenośnego rozwiązania; użyj
pytz
modułu, który zapewnia dostęp do bazy danych tz :W tym przypadku wynik jest taki sam.
Jeśli potrzebujesz nazwy strefy czasowej / skrótu / identyfikatora strefy, zapisz ją osobno.
Uwaga: nie,
:
w offsecie iEST
skrócie strefy czasowej UTC nie jest częścią formatu czasu ISO 8601. To nie jest wyjątkowe.Różne biblioteki / różne wersje tej samej biblioteki mogą używać różnych reguł stref czasowych dla tej samej daty / strefy czasowej. Jeśli jest to data w przyszłości, reguły mogą być jeszcze nieznane. Innymi słowy, ten sam czas UTC może odpowiadać innemu czasowi lokalnemu w zależności od używanych reguł - oszczędność czasu w formacie ISO 8601 pozwala zachować czas UTC i czas lokalny odpowiadający bieżącym regułom strefy czasowej używanym na Twojej platformie . Może być konieczne ponowne obliczenie czasu lokalnego na innej platformie, jeśli ma ona inne reguły.
źródło
Musisz użyć,
os.stat
aby uzyskać czas utworzenia pliku oraz kombinacjętime.strftime
itime.timezone
do formatowania:źródło
Popraw mnie, jeśli się mylę (nie jestem), ale przesunięcie względem UTC zmienia się wraz z czasem letnim. Więc powinieneś użyć
Uważam również, że znak powinien być inny:
Mogę się mylić, ale nie sądzę.
źródło
Zgadzam się z Jarkiem, a ponadto zauważam, że znakiem separatora przesunięcia ISO jest dwukropek, więc myślę, że ostateczna odpowiedź powinna brzmieć:
źródło
Dodanie niewielkiej wariacji do doskonałej odpowiedzi estani
Lokalnie zgodnie z ISO 8601 z TimeZone i bez mikrosekundowych informacji (Python 3):
Przykładowe dane wyjściowe:
Przetestowano, że dane wyjściowe mogą być analizowane zarówno przez Javascript, jak
Date
i C #DateTime
/DateTimeOffset
źródło
Opracowałem tę funkcję:
źródło
źródło