Как я печатаю дату и время в локальном часовом поясе?

Скажем, у меня есть переменная t, это установлено на это:

datetime.datetime(2009, 7, 10, 18, 44, 59, 193982, tzinfo=<UTC>)

Если я говорю str(t), я добираюсь:

'2009-07-10 18:44:59.193982+00:00'

Как я могу получить подобную строку, кроме печатного в локальном часовом поясе, а не UTC?

23
задан martineau 27 September 2019 в 07:44
поделиться

3 ответа

Думаю, вам следует осмотреться: datetime.astimezone ()

http://docs.python.org/library/datetime.html#datetime.datetime.astimezone

См. Также модуль pytz - его довольно легко использовать - например:

eastern = timezone('US/Eastern')

http://pytz.sourceforge.net/

Пример:

from datetime import datetime
import pytz
from tzlocal import get_localzone # $ pip install tzlocal

utc_dt = datetime(2009, 7, 10, 18, 44, 59, 193982, tzinfo=pytz.utc)
print(utc_dt.astimezone(get_localzone())) # print local time
# -> 2009-07-10 14:44:59.193982-04:00
24
ответ дан 29 November 2019 в 02:08
поделиться

На днях я написал что-то вроде этого:

import time, datetime
def nowString():
    # we want something like '2007-10-18 14:00+0100'
    mytz="%+4.4d" % (time.timezone / -(60*60) * 100) # time.timezone counts westwards!
    dt  = datetime.datetime.now()
    dts = dt.strftime('%Y-%m-%d %H:%M')  # %Z (timezone) would be empty
    nowstring="%s%s" % (dts,mytz)
    return nowstring

Так что интересная часть для вас, вероятно, это строка, начинающаяся с "mytz = ...". time.timezone возвращает местный часовой пояс, хотя и с противоположным знаком по сравнению с UTC. Таким образом, он говорит "-3600", чтобы выразить UTC + 1.

Несмотря на его игнорирование перехода на летнее время (DST, см. Комментарий), я оставляю это для людей, которые возятся с time.timezone .

0
ответ дан 29 November 2019 в 02:08
поделиться

я верю лучшему способу сделать, это должно использовать класс LocalTimezone , определенный в документация datetime.tzinfo (goto http://docs.python.org/library/datetime.html#tzinfo-objects, и прокрутить вниз к разделу "Example tzinfo classes"):

Принятие Локальный является экземпляром LocalTimezone

t = datetime.datetime(2009, 7, 10, 18, 44, 59, 193982, tzinfo=utc)
local_t = t.astimezone(Local)

затем , ул. (local_t) дает:

'2009-07-11 04:44:59.193982+10:00'

, который является тем, что вы хотите.

(Примечание: это может выглядеть странным вам, потому что я нахожусь в Новом Южном Уэльсе, Австралия, которая составляет 10 или 11 часов вперед из UTC)

10
ответ дан 29 November 2019 в 02:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: