У меня есть файл. В Python я хотел бы взять его время создания и преобразовать его в строку времени ISO (ISO 8601) , сохранив тот факт, что он был создан в восточном часовом поясе (ET) .
Как мне взять ctime файла и преобразовать его в строку времени ISO, которая указывает восточный часовой пояс (и при необходимости учитывает переход на летнее время)?
Ответы:
Локально по ISO 8601:
UTC по ISO 8601:
Локально по ISO 8601 без микросекунды:
UTC по ISO 8601 с информацией о часовом поясе (Python 3):
UTC по ISO 8601 с информацией о местном часовом поясе без микросекунды (Python 3):
Локально по ISO 8601 с информацией о часовом поясе (Python 3):
Обратите внимание, что при использовании
astimezone()
UTC время есть ошибка . Это дает неверный результат:Для Python 2 посмотрите и используйте pytz .
источник
.isoformat()
может принимать параметр разделителя, (если вы хотите что-то отличное от 'T'):.isoformat(' ')
It is permitted to omit the 'T' character by mutual agreement.
Вот что я использую для преобразования в формат даты и времени XSD:
Я сталкивался с этим вопросом, когда искал формат даты и времени XSD (
xs:dateTime
). Мне нужно было удалить микросекунды сisoformat
.источник
xs:date
таблицы стилей XSD / XML.xs:dateTime
ISO 8601 Представление времени
Международный стандарт ISO 8601 описывает строковое представление для даты и времени. Два простых примера этого формата
(оба обозначают 16 декабря 2010 г.), но формат также позволяет установить время разрешения менее одной секунды и указать часовые пояса. Этот формат, конечно, не специфичен для Python, но он хорош для хранения даты и времени в переносимом формате. Подробности об этом формате можно найти в записи Маркуса Куна .
Я рекомендую использовать этот формат для хранения времени в файлах.
Один из способов получить текущее время в этом представлении - использовать strftime из модуля времени в стандартной библиотеке Python:
Вы можете использовать конструктор strptime класса datetime:
Наиболее надежным является модуль Egenix mxDateTime:
Ссылки
Документация модуля времени Python
Документация по классу даты и времени Python
Egenix mxDateTime класс
источник
2018-05-25
2018-05-25T12:16:14+00:00
2018-05-25T12:16:14Z
20180525T121614Z
Я нашел datetime.isoformat в документации . Кажется, делать то, что вы хотите:
источник
ISO 8601 допускает компактное представление без разделителей, кроме
T
, поэтому я хотел бы использовать этот однострочный для получения быстрой строки метки времени:Если вам не нужны микросекунды, просто пропустите
.%f
часть:По местному времени:
Редактировать:
После прочтения этого вопроса я рекомендую оставить пунктуацию в. RFC 3339 рекомендует этот стиль, потому что, если все используют пунктуацию, нет риска, что несколько строк ISO 8601 будут отсортированы в группах по пунктуации. Таким образом, одна строка для соответствующей строки будет:
источник
2019-02-23T04:02:04.051Z
сnew Date().toISOString()
Формат времени ISO 8601 не хранит название часового пояса, сохраняется только соответствующее смещение UTC.
Чтобы преобразовать файл ctime в строку времени ISO 8601, сохранив смещение UTC в Python 3:
Код предполагает, что ваш местный часовой пояс - это восточный часовой пояс (ET) и что ваша система предоставляет правильное смещение UTC для данной временной метки POSIX (
ts
), т. Е. У Python есть доступ к базе данных исторических часовых поясов в вашей системе, или часовой пояс имел такие же правила на данную дату.Если вам нужно портативное решение; используйте
pytz
модуль, который обеспечивает доступ к базе данных tz :Результат такой же в этом случае.
Если вам нужно название часового пояса / сокращение / идентификатор зоны, сохраните его отдельно.
Примечание: нет,
:
смещение UTC иEST
сокращение часового пояса не является частью формата времени ISO 8601. Это не уникально.Разные библиотеки / разные версии одной и той же библиотеки могут использовать разные правила часового пояса для одной и той же даты / часового пояса. Если это будущая дата, то правила могут быть еще неизвестны. Другими словами, одно и то же время UTC может соответствовать разному местному времени, в зависимости от того, какие правила вы используете - сохранение времени в формате ISO 8601 сохраняет время UTC и местное время, которое соответствует текущим правилам часового пояса, используемым на вашей платформе. , Возможно, вам придется пересчитать местное время на другой платформе, если она имеет другие правила.
источник
Вам нужно будет использовать,
os.stat
чтобы получить время создания файла и комбинациюtime.strftime
иtime.timezone
для форматирования:источник
Поправьте меня, если я ошибаюсь (я не ошибаюсь), но смещение от UTC меняется с переходом на летнее время. Так что вы должны использовать
Я также считаю, что знак должен быть другим:
Я могу ошибаться, но я так не думаю.
источник
Я согласен с Яреком и, кроме того, отмечаю, что символ разделителя смещения ISO является двоеточием, поэтому я думаю, что окончательный ответ должен быть:
источник
Добавление небольшого варианта к отличному ответу Эстани
Локально по ISO 8601 с TimeZone и без микросекундной информации (Python 3):
Пример вывода:
Проверено, что этот вывод может быть проанализирован как Javascript, так
Date
и C #DateTime
/DateTimeOffset
источник
Я разработал эту функцию:
источник
источник