前言

最近遇到一个问题:北京时间与美国时间的转换, 按照之前的方式转换,程序一直没报什么错 但最近运行竟然出错了

我换算的是CT时间和北京时间的换算, 经过调查才知道,美国时区是分冬令时和夏令时的

之前的换算方式

美国夏令时从每年的3月第二个周日2AM(当地时间)开始,持续到11月第一个周日2AM(当地时间)结束,夏令时的时候要比冬令时少一个小时,所以我之前写这段代码的时候是在冬令时,相差14个小时,没有问题。

GetCTtime
${last_calcutation_date} evaluate (datetime.datetime.now() + datetime.timedelta(hours=-14)).strftime("%m/%d/%Y %H:%M") datetime

很不幸,现在是夏令时,那就是相差13个小时, 我算出来的就不准确了

GetCTtime
${last_calcutation_date} evaluate (datetime.datetime.now() + datetime.timedelta(hours=-13)).strftime("%m/%d/%Y %H:%M") datetime

为了避免判断是夏令时还是冬令时,我换了一种方式,直接获取该时区的具体时间,不在与北京时间进行换算

现在用的

GetCTtime
${last_calcutation_date} evaluate (datetime.datetime.now(pytz.timezone('America/Chicago'))).strftime("%m/%d/%Y %H:%M") datetime,pytz

测试

Python时区转换的两种方式_后端

用到的Python知识点

Python库 datetime

datetime 模块是对 time 模块的一个高级封装,提供了对日期、时间、时区、时间段的操作。与 time 模块相比,datetime 模块提供的接口更直观、易用,功能也更加强大 大概有如下类

  • date 日期类
  • time 时间类
  • datetime 日期与时间类
  • timedelta 表示两个date ,time, datetime实例之间的时间差
  • datetime.tzinfo 时区相关信息对象的抽象基类
  • datetime.timezone 实现tzinfo抽象基类的类,表示与UTC的固定偏移量

python库 pytz

可参考官方文档,有空就编译下

pytz.sourceforge.net/