Python 为什么我的时区日期时间错了?
我用这个代码来格式化我的时间,但是出来的时间错了5个小时。我现在应该是加尔各答06岁左右了,它把现在的时间格式化为01。。。某物代码有什么问题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
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
1tzone.localize
方法不在时区之间转换。信息技术
将给定的本地时间解释为tzone
中给定的本地时间。因此,如果转换为\u格式
是
表示解释为UTC时间,然后使用UTC.localize
转换
将原始日期时间转换为具有时区意识的UTC时间。不相关的设计提示:将I/O与计算分开,即您应该创建3个函数:1。将输入字符串解析为
datetime
对象2。将其定位在给定的时区3。格式output@J.F.Sebastian谢谢你的评论。我将根据您的建议重构代码。注意:pytz.utc
是一种特殊情况:您可以将其直接传递给datetime
构造函数(或.replace()
)方法。