Python-将ISO 8601转换为BST时间

时间:2018-07-02 09:28:09

标签: python datetime time

因此,基本上我对ISO 8601的格式有所了解

"2018-07-06T07:00:00.000"

基本上,我所获得的是我开始将ISO更改为更正式的时间戳,即:

etatime = str(datetime.datetime.strptime("2018-07-06T07:00:00.000", "%Y-%m-%dT%H:%M:%S.%f"))

这将给出以下输出:

2018-07-06 07:00:00

但是我注意到时间比BST(英国时间)晚1小时,应该再加上1小时。

我的问题是,是否可以从(2018-07-06T07:00:00.000)到(2018-07-06 08:00:00 BST)?

2 个答案:

答案 0 :(得分:1)

一个建议是您可以使用timedelta模块中的datetime函数:

from datetime import datetime, timedelta

etatime = datetime.strptime("2018-07-06T07:00:00.000", "%Y-%m-%dT%H:%M:%S.%f")

# Before adding one hour
print(etatime)

etatime = etatime + timedelta(hours=1)

# After adding one hour
print(etatime)

输出:

2018-07-06 07:00:00
2018-07-06 08:00:00

答案 1 :(得分:1)

假设:输入代表UTC时间戳,您想将其本地化为伦敦时间。您可能不想将其本地化为BST时间,因为BST是GMT的DST变体,并且像伦敦这样的实际位置会根据一年中的时间在BST和GMT之间切换。您将要安装pytz module

from datetime import datetime, timezone
import pytz

date = '2018-07-06T07:00:00.000'
utc_date = datetime.strptime(date, '%Y-%m-%dT%H:%M:%S.%f').replace(tzinfo=timezone.utc)
london_date = utc_date.astimezone(pytz.timezone('Europe/London'))
datetime.datetime(2018, 7, 6, 8, 0, tzinfo=<DstTzInfo 'Europe/London' BST+1:00:00 DST>)

strptime为您提供天真 datetime对象(没有时区信息),.replace为您提供感知 {{1 }}对象(带有时区信息),然后您可以将其简单地转换为其他时区。