python读取outlook邮件内容不同时区会有影响吗_python中的时区问题

本文详细探讨了Python中的时区问题,包括基础概念如GMT、UTC和CST,以及ISO 8601时间表示。重点讨论了datetime模块在处理时区时的注意事项,如datetime.now()与datetime.utcnow()的区别,以及如何正确设置和转换时区。此外,还分享了在gRPC和MongoDB中遇到的时区陷阱,提醒开发者在使用时区时要避免使用可能导致误解的方法,并提供了解决方案。
摘要由CSDN通过智能技术生成

问题背景

使用 Python 进行了许久的开发,一直没有踩到时区的坑,最近新的业务中引入了比较多的服务,而且使用 grpc 进行数据通讯,不幸踩到了时区的坑,果然偷的懒最终还是会有报应的,于是梳理下对应的时区问题,同时发现系统中之前的数据库 Mongo 中的时区问题,一起整理如下。

基础概念

几个时间概念

首先是几个常见的时间概念

GMT 时间:格林威治时间,基准时间

UTC 时间:Coordinated Universal Time,全球协调时间,更精准的基准时间,与 GMT 基本等同

CST 中国基准时间:为 UTC 时间 + 8 小时,即 UTC 时间的 0 点对应于中国基准时间的 8 点,即为一般称为东八区的时间

ISO 8601

一种标准化的时间表示方法,表示格式为 :YYYY-MM-DDThh:mm:ss ± timezone,可以表示不同时区的时间,时区部分用Z 表示为 UTC 标准时区。两个例子:

1997-07-16T08:20:30Z 表示的是 UTC 时间的 1997 年 7 月 16 号 8:20:30

1997-07-16T19:20:30+08:00 表示的是东八区时间的 1997 年 7 月 16 号 19:20:30

时间戳

1970年1月1日 00:00:00 UTC+00:00时区的时刻称为epoch time,记为0,当前的时间戳即为从 epoch time 到现在的秒数,一般叫做 timestamp,因此一个时间戳一定对应于一个特定的 UTC 时间,同时也对应于其他时区的一个确定的时间。因此时间戳可以认为是一个相对安全的时间表示方法。

datetime 实践

datetime 是 python 中最基础的一个时间管理包,下面分别利用 datetime 去实践下对应的时区概念

datetime 类型

datetime 分成两种类型:

naive,本地类型的时间,当 datetime 中没有指定时区信息时就是这种类型,此类型的时区是根据运行环境确定对应的时区。因此这种类型的时间会因为运行环境的不同而得到不同时间戳

aware,带有时区类型的时间,这种类型的时间对象由于时间和时区都是确定的,因此对应于确定的时间戳

举例如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值