为什么我的时区日期时间错了?



我用这段代码来格式化我的时间,但是出来的时间是错误的5个小时。我现在应该是在加尔各答的06点,现在的时间格式是01…某物代码有什么问题?

def datetimeformat_viewad(to_format, locale='en', timezoneinfo='Asia/Calcutta'):
    tzinfo = timezone(timezoneinfo)
    month = MONTHS[to_format.month - 1]
    input = pytz.timezone(timezoneinfo).localize(
        datetime(int(to_format.year), int(to_format.month), int(to_format.day), int(to_format.hour), int(to_format.minute)))
    date_str = '{0} {1}'.format(input.day, _(month))
    time_str = format_time(input, 'H:mm', tzinfo=tzinfo, locale=locale)
    return "{0} {1}".format(date_str, time_str)

这个代码工作,这是根据下面的答案。

def datetimeformat_viewad(to_format, locale='en', timezoneinfo='Asia/Calcutta'):
    import datetime as DT
    import pytz
    utc = pytz.utc
    to_format = DT.datetime(int(to_format.year), int(to_format.month), int(to_format.day), int(to_format.hour), int(to_format.minute))
    utc_date = utc.localize(to_format)
    tzone = pytz.timezone(timezoneinfo)
    tzone_date = utc_date.astimezone(tzone)
    month = MONTHS[int(tzone_date.month) - 1]
    time_str = format_time(tzone_date, 'H:mm')
    date_str = '{0} {1}'.format(tzone_date.day, _(month))
    return "{0} {1}".format(date_str, time_str)

听起来to_format是UTC时间的天真日期时间。您要将转换为加尔各答时间。

为此, to_format本地化为UTC时间1,然后使用astimezone 时区感知时间转换为加尔各答时间:

import datetime as DT
import pytz
utc = pytz.utc
to_format = DT.datetime(2015,7,17,1,0)
print(to_format)
# 2015-07-17 01:00:00
utc_date = utc.localize(to_format)
print(utc_date)
# 2015-07-17 01:00:00+00:00
timezoneinfo = 'Asia/Calcutta'
tzone = pytz.timezone(timezoneinfo)
tzone_date = utc_date.astimezone(tzone)
print(tzone_date)
# 2015-07-17 06:30:00+05:30

1 tzone.localize方法不进行时区转换。它给定的本地时间解释为tzone中给定的本地时间。如果to_format是意味着被解释为UTC时间,然后使用utc.localize转换

相关内容

  • 没有找到相关文章

最新更新