Как получить inoFormat String DateTime, включая часовой пояс по умолчанию?

StackOverflow https://stackoverflow.com/questions/3401428

Вопрос

Мне нужно создать временную строку, которая соответствует формату ISO yyyy-mm-ddThh:mm:ss.ssssss-ZO:NE. Отказ То now() а также utcnow() Методы класса почти делают то, что я хочу.

>>> import datetime
>>> #time adjusted for current timezone
>>> datetime.datetime.now().isoformat()
'2010-08-03T03:00:00.000000'
>>> #unadjusted UTC time
>>> datetime.datetime.utcnow().isoformat()
'2010-08-03T10:00:00.000000'
>>>
>>> #How can I do this?
>>> datetime.datetime.magic()
'2010-08-03T10:00:00.000000-07:00'
Это было полезно?

Решение

Что-то в этом роде в следующем примере. Обратите внимание, что в восточной части Австралии (UTC + 10 часов в данный момент).

>>> import datetime
>>> dtnow = datetime.datetime.now();dtutcnow = datetime.datetime.utcnow()
>>> dtnow
datetime.datetime(2010, 8, 4, 9, 33, 9, 890000)
>>> dtutcnow
datetime.datetime(2010, 8, 3, 23, 33, 9, 890000)
>>> delta = dtnow - dtutcnow
>>> delta
datetime.timedelta(0, 36000)
>>> hh,mm = divmod((delta.days * 24*60*60 + delta.seconds + 30) // 60, 60)
>>> hh,mm
(10, 0)
>>> "%s%+02d:%02d" % (dtnow.isoformat(), hh, mm)
'2010-08-04T09:33:09.890000+10:00'
>>>

Другие советы

Чтобы получить текущее время в UTC в Python 3.2+:

>>> from datetime import datetime, timezone
>>> datetime.now(timezone.utc).isoformat()
'2015-01-27T05:57:31.399861+00:00'

Получить местное время в Python 3.3+:

>>> from datetime import datetime, timezone
>>> datetime.now(timezone.utc).astimezone().isoformat()
'2015-01-27T06:59:17.125448+01:00'

Объяснение: datetime.now(timezone.utc) производит часовой пояс datetime объект в UTC время. astimezone() затем меняет часовой пояс datetime Объект, к тому времени локализованности системы, если они называются без аргументов. Часовой пояс в курсе datetime Затем объекты создают правильный формат ISO автоматически.

Вам необходимо ознаменовать свои объекты DateTime Objects. из DateTime Docs.:

Существует два вида и времени объектов: «наивный» и «осознание». Это различие относится к тому, имеет ли объект любое понятие часового пояса, летнее время, или другой вид алгоритмической или политической регулировки времени. Представляет ли наивный объект DateTime Concreded Enternal Time (UTC), местное время или время в некоторых других часовых поясах чисто зависит от программы, так же, как и вплоть до программы, является ли конкретное число счетчиков, миль или массу. Объекты Naive DateTime легко понять и работать, по стоимости игнорирования некоторых аспектов реальности.

Когда у вас есть объект Aware DateTime, вы можете использовать ISOFormat () и получить необходимый вам вывод.

Чтобы узнать объекты DateTime, вам нужно Подкласс Tzinfo, как второй пример здесь, или проще - используйте пакет, который делает это для вас, как пятно или python-dateutil.

Используя Pytz, это будет выглядеть так:

import datetime, pytz
datetime.datetime.now(pytz.timezone('US/Central')).isoformat()

Вы также можете управлять форматом вывода, если вы используете strftime с Директива формата «% Z» подобно

datetime.datetime.now(pytz.timezone('US/Central')).strftime('%Y-%m-%dT%H:%M:%S.%f%z')

С участием стрела:

>>> import arrow
>>> arrow.now().isoformat()
'2015-04-17T06:36:49.463207-05:00'
>>> arrow.utcnow().isoformat()
'2015-04-17T11:37:17.042330+00:00'

Вы можете сделать это в Python 2.7+ с python-dateutil (который находятся на Mac по умолчанию):

>>> from datetime import datetime
>>> from dateutil.tz import tzlocal
>>> datetime.now(tzlocal()).isoformat()
'2016-10-22T12:45:45.353489-03:00'

Или вы хотите преобразовать из существующей сохраненной строки:

>>> from datetime import datetime
>>> from dateutil.tz import tzlocal
>>> from dateutil.parser import parse
>>> parse("2016-10-21T16:33:27.696173").replace(tzinfo=tzlocal()).isoformat()
'2016-10-21T16:33:27.696173-03:00' <-- Atlantic Daylight Time (ADT) 
>>> parse("2016-01-21T16:33:27.696173").replace(tzinfo=tzlocal()).isoformat()
'2016-01-21T16:33:27.696173-04:00' <-- Atlantic Standard Time (AST)
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top