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

时间:2015-07-18 01:27:15

标签: python google-app-engine datetime

我使用此代码来格式化我的时间,但出现的时间是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)

1 个答案:

答案 0 :(得分:2)

听起来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来转换 天真的日期时间到时区感知的UTC时间。