我怎样才能拥有BST日期时间对象?

问题描述 投票:0回答:1

我试图比较许多有意识的日期时间对象。我找到了pytz,但没有找到BST时区或如何创建自定义时区,所以我可以在英国夏季时间使用UTC + 1。无论如何,我想出了一个有效的解决方法,但我很确定还有另一种更好的方式,所以我在下面分享它。

基于timeanddate.com for London,这是我感兴趣的领域:

2019年3月31日星期日,01:00:00时钟转发1小时至2019年3月31日星期日,当地白天时间02:00:00。

所以tz_1和tz_2应该是UTC,而tz_3应该是BST。

import datetime
import pytz

tz_1 = pytz.timezone('Europe/London').localize(datetime.datetime(2019, 3, 30, 9, 15)).tzinfo
tz_2 = pytz.timezone('Europe/London').localize(datetime.datetime(2019, 3, 31, 9, 15)).tzinfo
tz_3 = pytz.timezone('Europe/London').localize(datetime.datetime(2019, 4, 1, 9, 15)).tzinfo

date1 = datetime.datetime(2019 , 4, 25, tzinfo = tz_1)
date2 = datetime.datetime(2019 , 4, 25, tzinfo = tz_2)
date3 = datetime.datetime(2019 , 4, 25, tzinfo = tz_3)

utc_date = datetime.datetime(2019, 4, 25, tzinfo = pytz.UTC)

print ("Date 1:   ", date1, date1.tzinfo) # Timezone returns Europe/London
print ("Date 2:   ", date1, date2.tzinfo) # Timezone returns Europe/London
print ("Date 3:   ", date1, date3.tzinfo) # Timezone returns Europe/London
print ("UTC date: ", utc_date, utc_date.tzinfo) # Timezone returns UTC

print (date1 > date2) # returns True
print (date2 > date3) # returns False
print (date3 > date1) # returns False

比较是正确的,但可视化并不是那么好,因为所有这些都将“欧洲/伦敦”作为时区返回。因此,我很难理解日期时间对象是在伦敦的BST时间还是伦敦的UTC时间。

另外你会注意到我正在将时区强制到2019-04-25。时区应该是BST,但我也强制它是UTC时区。我将在我的脚本中强制将时区用于对象,因为我从.csvs读取它们并且它们被读作字符串而不是日期时间对象。

所以我的最后一个问题是,如何使用BST获得日期时间对象?

python datetime pytz
1个回答
0
投票

要检查日期时间是否在BST(英国夏令时)内,请检查时区对象的dst()(夏令时调整)功能:

print('Is Summer time?')
print(date1, tz_1.dst(date1) != datetime.timedelta(0))
print(date2, tz_2.dst(date2) != datetime.timedelta(0))
print(date3, tz_3.dst(date3) != datetime.timedelta(0))
© www.soinside.com 2019 - 2024. All rights reserved.