前言
在开发时,总会遇到需要处理时间的地方。在python中,一个比较好的处理方式就是使用datetime模块,对日期的操作都有实现,还能设置时间的时区,获得两个时间的差值。下面将对常见的用法进行介绍。
1.datetime模块常用类
-
class datetime.date 日期类,没有花里胡哨的东西,属性只有year,month,day
-
class datetime.time 时间类,属性为hour(0~23),minute,second,microsecond,tzinfo,fold
前三个属性基本就满足我们的需求了,microsecond为秒级别,取值为0~999999tzinfo全名为timezoneInfo,其实就是时区信息,负责获取时区信息,本地时间与UTC的差值等fold[0,1]用于在重复时间段中消除边界时间的歧义。(时区问题,具体可看以下参考资料)
-
class datetime.datetime 时间和日期的结合。
-
class datetime.timedelta 获得两个datetime或date实例的差值,结果能转换为各个单位,year,month,day等
2.常见用法
-
date和datetime,都能通过today方法获得当前的系统时间
-
最常用的方法如下:
strptime: 类方法
p表示parse,表示分析的意思,所以strptime是给定一个时间字符串和分析模式,返回一个时间对象。
strftime: 实例方法
f表示format,表示格式化,和strptime正好相反,要求给一个时间对象和输出格式,返回一个时间字符串
datetime.strptime('31/01/22 23:59:59.999999',
... '%d/%m/%y %H:%M:%S.%f')
datetime.datetime(2022, 1, 31, 23, 59, 59, 999999)
>>> _.strftime('%a %d %b %Y, %I:%M%p')
'Mon 31 Jan 2022, 11:59PM'
3.时区问题
其中的坑就有%Z,在时区为CST(中国标准时间)时,识别不出来,抛出异常ValueError,因为他内部没有这个时区,因此在遇到有时区时,最好将字符串切片解析,单独将时区拎出来处理。
关于时区ETC/GMT设置问题: 使用Linux设定时区时,若是选用Etc底下的GMT时区,可能会发现设定的结果与你预想的不同,当你想设定北京的时区(GMT+8) ,但设定完后,系统时间却是-8的时区,和北京时间相差16小时,原因是因为Etc底下的GMT时区是以格林威治以西为正,以东为负,刚好与我们现实生活的认知相反。
而原因只是因为当初Unix 多为西方人使用,便以西为正
4.总结
在目前刚学python时,获取android的时间,在解析时间时由于CST时区的影响,代码一直抛异常。因此就去系统学习了datetime这一模块,感觉其实总体来说就最后那两个方法最实用耐用,如果在操作海外的时间时,就要注意时区问题:夏令时等,这个在接触后会更新。
5.参考资料
[python官方文档](datetime --- 基本日期和时间类型 — Python 3.12.4 文档)