如何获得BST日期时间对象?

时间:2019-04-30 09:17:40

标签: python datetime pytz

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

基于timeanddate.com伦敦,这是我感兴趣的区域:

  

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中使用日期时间对象?

1 个答案:

答案 0 :(得分: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))