Python 在时区之间转换日期时间
这完全把我弄糊涂了。我已经尝试了多种方法将Python 在时区之间转换日期时间,python,datetime,Python,Datetime,这完全把我弄糊涂了。我已经尝试了多种方法将2017-06-04 00:00:00(美国/纽约)的日期时间字符串转换为欧洲/伦敦时区,我相信现在的夏令时早上6点应该是这样的 日期和转换的整个概念让我困惑,我似乎只是误解了,或者没有理解简单的原则,这张图片展示了我当前的代码和我得到的结果 我只是想能够给出一个函数,一个datetime字符串,以及它所属的时区,给它一个我想要的时区,并得到一个调整后的datetime的字符串,但我得到的东西是4分钟以外的等等 from datetime import
2017-06-04 00:00:00(美国/纽约)
的日期时间字符串转换为欧洲/伦敦
时区,我相信现在的夏令时早上6点应该是这样的
日期和转换的整个概念让我困惑,我似乎只是误解了,或者没有理解简单的原则,这张图片展示了我当前的代码和我得到的结果
我只是想能够给出一个函数,一个datetime
字符串,以及它所属的时区,给它一个我想要的时区,并得到一个调整后的datetime
的字符串,但我得到的东西是4分钟以外的等等
from datetime import datetime
import pytz
import arrow
#Calc Timezone Offsets
def adjust_timezone(datetime_string, input_tz, output_tz, formatter="%Y-%m-
%d %H:%M:%S"):
print datetime_string
# Now we make datetime naive datetime
date_to_convert = datetime.strptime(datetime_string, formatter)
a = arrow.get(datetime_string, 'YYYY-M-D HH:mm:ss').replace(tzinfo=pytz.utc)
print a.to(output_tz).format('YYYY-M-D HH:mm:ss')
# Make it tz aware
date_to_convert = date_to_convert.replace(tzinfo=pytz.timezone(input_tz))
print date_to_convert
date_to_convert = date_to_convert.astimezone(pytz.timezone(input_tz))
print date_to_convert
# Convert it
output_datetime = date_to_convert.astimezone(pytz.timezone(output_tz))
print output_datetime
# Make tz unaware again
output_datetime = output_datetime.replace(tzinfo=None)
return str(output_datetime)
print adjust_timezone('2017-06-04 00:00:00', "America/New_York", "Europe/London")
以上运行时返回以下结果:
2017-06-04 00:00:00
2017-6-4 01:00:00
2017-06-04 00:00:00-04:56
2017-06-04 00:00:00-04:56
2017-06-04 05:56:00+01:00
2017-06-04 05:56:00
虽然这是一个很好的图书馆,但我们这里并不真正需要它。相反,我们将为此使用和。关键要素是和
代码:
测试代码:
结果:
请把你的代码贴在这里,而不是截图。看一看:非常感谢,它对我来说非常有效,我想我读了太多东西却没有吸收,这一切都变得完全混乱了。。作为一个附带问题,新的日期时间在结尾处有+0100,这是否包括在0500中,只是一个指标?我假设它代表日光调节,但可能是错误的,因此我可以将其格式化为字符串,对+0100取反+1只是打印例程中的信息,表示与GMT的偏移量。它将显示在未使用
strftime
打印的非原始时间戳上。非常感谢@Stephen
def adjust_timezone(datetime_string, input_tz, output_tz,
formatter="%Y-%m-%d %H:%M:%S"):
# Now we make datetime naive datetime
naive = dt.datetime.strptime(datetime_string, formatter)
# this time stamp is from the input_tz
with_input_tz = pytz.timezone(input_tz).localize(naive)
# now express the timestamp as output_tz
with_output_tz = with_input_tz.astimezone(pytz.timezone(output_tz))
return with_output_tz
import datetime as dt
import pytz
print(adjust_timezone(
'2017-06-04 00:00:00', "America/New_York", "Europe/London"))
2017-06-04 05:00:00+01:00