今天跟大家唠唠我在家倒腾“丹麦时间”这个事的整个过程,说起来有点折腾,但也挺有意思的。
起因很简单,有个朋友要去丹麦玩,问我那边现在几点,跟北京差多少。我这人就喜欢刨根问底,心想不能光告诉他个数字,得自己搞明白这时间是怎么算的,以后问我的人多了,我也能装个X。
我上网搜了下,“丹麦时间”、“北京时间”、“时差”,各种关键词招呼上。网上的信息是挺多的,什么“丹麦比北京慢7小时”、“丹麦夏令时”,看得我有点懵。
然后我就开始整理这些信息,发现几个关键点:
- 丹麦用的是欧洲中部时间(CET),也就是格林尼治时间(GMT)+1小时。
- 北京时间是GMT+8小时。
- 理论上丹麦比北京慢7个小时。
- 但是!丹麦有夏令时,从每年三月底到十月底,会把时间往前拨一个小时。
光看理论不行,得实践!我就打开手机,想看看有没有什么靠谱的App或者网站能直接显示两个地方的时间。找了半天,还真找到几个,但是感觉都不太直观,要么广告太多,要么界面太复杂。
不行,得自己动手!我寻思着,这不就是个简单的加减法吗?我用Python写个小脚本,直接显示两个时间,还能自动判断夏令时不就得了?
说干就干!
我查了Python里怎么获取当前时间,这个简单,datetime库搞定。
然后,怎么把时间转换成不同时区的?这个稍微麻烦点,得用到pytz库,还得知道丹麦的时区代码是又是一顿搜索,找到丹麦的时区代码是Europe/Copenhagen。
就是写代码了。我先把北京时间搞出来,然后用pytz把北京时间转换成丹麦时间。核心代码大概是这样的:
import datetime
import pytz
# 获取北京时间
beijing_tz = *('Asia/Shanghai')
beijing_time = *(beijing_tz)
# 获取丹麦时间
denmark_tz = *('Europe/Copenhagen')
denmark_time = beijing_*(denmark_tz)
print("北京时间:", beijing_*("%Y-%m-%d %H:%M:%S"))
print("丹麦时间:", denmark_*("%Y-%m-%d %H:%M:%S"))
跑了一下,发现时间是对的,但是没考虑夏令时。我就继续查资料,看看pytz能不能自动处理夏令时。结果发现,pytz默认就是支持夏令时的,不需要额外处理。
为了验证是不是真的,我就手动把电脑时间调到丹麦的夏令时期间,再跑一遍脚本,果然,时间自动往前拨了一个小时。
搞定!
我把这个小脚本打包成了一个简单的命令行工具,以后谁再问我丹麦时间,我就直接运行一下,把结果甩给他,倍儿有面子。
这回倒腾“丹麦时间”的经历,让我对时区的概念有了更深的理解,也算是把Python练得更熟了。以后遇到类似的问题,也能更快地解决。下次有机会,再跟大家分享其他的折腾经历!

还没有评论,来说两句吧...