知行编程网知行编程网  2023-01-13 13:30 知行编程网 隐藏边栏  2 
文章评分 0 次,平均分 0.0
导语: 本文主要介绍了关于datetime在python3时间中的特殊使用有哪些?的相关知识,希望可以帮到处于编程学习途中的小伙伴


python3时间中datetime有什么特殊用途?

当我们要给其他时区的亲朋好友带一部手机时,就会涉及到不同时区的问题。也许我们这边是白天,而他们已经快午夜了。所以这样贸然打电话是不合适的。我们需要先计算出他们的时区,然后才能联系到他们。那么,有什么跨时区计算的好方法吗?今天小编用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学习推荐:



本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写
扫一扫二维码分享