Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/349.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_Datetime - Fatal编程技术网

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