Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么我的时区日期时间错了?_Python_Google App Engine_Datetime - Fatal编程技术网

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

Python 为什么我的时区日期时间错了?,python,google-app-engine,datetime,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.tim

我用这个代码来格式化我的时间,但是出来的时间错了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时间中是一个简单的日期时间。 你想把它转换成加尔各答时间

为此,您将
本地化为_格式
为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
中给定的本地时间。因此,如果
转换为\u格式
是 表示解释为UTC时间,然后使用
UTC.localize
转换
将原始日期时间转换为具有时区意识的UTC时间。

不相关的设计提示:将I/O与计算分开,即您应该创建3个函数:1。将输入字符串解析为
datetime
对象2。将其定位在给定的时区3。格式output@J.F.Sebastian谢谢你的评论。我将根据您的建议重构代码。注意:
pytz.utc
是一种特殊情况:您可以将其直接传递给
datetime
构造函数(或
.replace()
)方法。