当我们要给其他时区的亲朋好友带一部手机时,就会涉及到不同时区的问题。也许我们这边是白天,而他们已经快午夜了。所以这样贸然打电话是不合适的。我们需要先计算出他们的时区,然后才能联系到他们。那么,有什么跨时区计算的好方法吗?今天小编用python3中的datetime来教大家计算。
像这样声明的对象 datetime(2019,1,1, 0,0,0) 没有时区信息。每个datetime对象都有一个tzinfo属性,刚刚生成的对象的tzinfo为None。如果要声明一个带有时区信息的datetime对象,需要先声明一个时区,这个时区就是一个timezone对象,可以通过timedelta构造
e8zone = timezone(timedelta(hours=8), 'Asia/Shanghai')
d = datetime(2019,1,1, 0,0,0, tzinfo=e8zone)
print(d)
而此时的输出是
2019-01-01 00:00:00+08:00
可以看到和前面相比多出来了
+08:00的信息表示东八区,如果是不带时区的datetime对象,则不会输出时区部分。
另外,你还可以定制化
datetime对象的输出
f = d.strftime("%Y-%m-%d %H:%M:%S.%f %Z")
print(f)
此时,会输出
2019-01-01 00:00:00.000000 Asia/Shanghai
此时%Z以文本形式输出时区。如果你想要类似+0800的时区格式,可以用%z代替
时区不只是
+8,-8这样的,还有不规则的时区比如加拿大纽芬兰的时区
e3mzone = timezone(timedelta(hours=-3, minutes=-30), 'Canada/Newfoundland')
d = datetime.datetime(2019,1,1, 0,0,0, tzinfo=e3mzone)
print(d)
会输出
2019-01-01 00:00:00+08:00
而且我们替换时区的时候,默认的python包不会自动转换
e3mzone = timezone(timedelta(hours=-3, minutes=-30), 'Canada/Newfoundland')
d = datetime.datetime(2019,1,1, 0,0,0, tzinfo=e3mzone)
print(d)
e8zone = timezone(timedelta(hours=8), 'Asia/Shanghai')
d = d.replace(tzinfo=e8zone)
print(d)
会输出
2019-01-01 00:00:00-03:30
2019-01-01 00:00:00+08:00
不同时区的替换方式是不是很有意思,这样就不用了自己去算不同时区的时差啦。
更多Python学习推荐:
。
本文为原创文章,版权归知行编程网所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ 为什么说python是胶水语言11/24
- ♥ python线程模块有哪些功能11/16
- ♥ 如何在 Python 中定义函数09/23
- ♥ Python实现查询纠错12/24
- ♥ python如何读取像素值11/24
- ♥ 如何编写python if语句11/10
内容反馈