日期时间数据类型和工具
常用的时间表现形式:时间戳,格式化的时间字符串,Python中的time模块的time.struct_time,datetime模块的datetime类。
Python标准库包含于日期(date)和时间(time)数据的数据类型,datetime、time以及calendar模块会被经常用到。
datetime官方文档:https://docs.python.org/3/library/datetime.html#strftime-and-strptime-behavior;
time官方文档:https://docs.python.org/zh-cn/3/library/time.html#module-time;
calendar官方文档:https://docs.python.org/zh-cn/3/library/calendar.html#module-calendar。
相关术语的解释
- UTC(Coordinated Universal Time):世界协调时,又称格林尼治天文时间/世界标准时间。与UTC相对应地是各个时区里的local time,东N区的时间比UTC时间早N个小时,因此UTC time + N小时 即为东N区的本地时间;而西N区时间比UTC时间晚N个小时,即 UTC time - N小时 即为西N区的本地时间; 中国在东8区,因此比UTC时间早8小时,可以以UTC+8进行表示;
- epoch time:表示时间开始的起点;它是一个特定的时间,不同平台上这个时间点的值不太相同,对于Unix而言,epoch time为 1970-01-01 00:00:00 UTC;
- timestamp(时间戳):也称为Unix时间 或 POSIX时间;它是一种时间表示方式,表示从格林尼治时间1970年1月1日0时0分0秒开始到现在所经过的毫秒数,其值为float类型。 但是有些编程语言的相关方法返回的是秒数(Python就是这样),这个需要看方法的文档说明。需要说明的是时间戳是个差值,其值与时区无关。
time.struct_time
time.struct_time包含如下属性:
time.struct_time属性
属性值获取方式有两种:
- 把它当做一种特殊的有序不可变序列通过下标/索引获取各个元素的值,如t[0];
- 通过.属性名 的方式来获取各个元素的值,如t.tm_year。
需要注意的是:struct_time实例的各个属性都是只读的,不可修改。
time模块
time模块主要用于时间访问和转换,这个模块提供了各种与时间相关的函数。
time函数1
time函数2
- 获取时间戳格式的时间数据
t1 = time.time()
print(t1)
结果:
1562568773.8972986
- 获取struct_time格式的时间
t2 = time.localtime()
print(t2)
year = t2[0]
month = t2[1]
day = t2[3]
hour = t2[4]
minute = t2[5]
second = t2[6]
结果是:
time.struct_time(tm_year=2019, tm_mon=7, tm_mday=8, tm_hour=14, tm_min=55, tm_sec=3, tm_wday=0, tm_yday=189, tm_isdst=0)
2019
7
14
55
3
0
- 获取字符串格式的时间
t3 = time.ctime()
print(t3)
t4 = time.asctime()
print(t4)
结果是:
Mon Jul 8 14:58:36 2019
Mon Jul 8 14:58:53 2019
- 时间戳格式转struct_time格式时间
t5 = time.time()
print(t5)
t6 = time.localtime(t5)
print(t6)
t7 = time.gmtime(t5)
print(t7)
t8 = time.struct_time(t6)
print(t8)
结果是:
1562569462.8396223
time.struct_time(tm_year=2019, tm_mon=7, tm_mday=8, tm_hour=15, tm_min=4, tm_sec=22, tm_wday=0, tm_yday=189, tm_isdst=0)
time.struct_time(tm_year=2019, tm_mon=7, tm_mday=8, tm_hour=7, tm_min=4, tm_sec=22, tm_wday=0, tm_yday=189, tm_isdst=0)
time.struct_time(tm_year=2019, tm_mon=7, tm_mday=8, tm_hour=15, tm_min=4, tm_sec=22, tm_wday=0, tm_yday=189, tm_isdst=0)
需要注意的是,time.localtime()输入参数是时间戳,time.gmtime()输入参数是struct_time。
- 字符串格式时间转成struct_time格式时间
a = time.strptime('Sat Feb 04 14:06:42 2017')
print(a)
b = time.strptime('Sat Feb 04 14:06:42 2017', '%a %b %d %H:%M:%S %Y')
print(b)
c = time.strptime('2017-01-13 17:07','%Y-%m-%d %H:%M')
print(c)
d = time.strptime('2017/01/12 17:07','%Y/%m/%d %H:%M')
print(d)
e = time.strptime('201702041412','%Y%m%d%H%M')
print(e)
f = time.strptime('20170204','%Y%m%d')
print(f)
year1 = f[0]
month1 = f[1]
day1 = f[2]
wday1 = f[6]
print(year1)
print(month1)
print(day1)
print(wday1)
结果是:
time.struct_time(tm_year=2017, tm_mon=2, tm_mday=4, tm_hour=14, tm_min=6, tm_sec=42, tm_wday=5, tm_yday=35, tm_isdst=-1)
time.struct_time(tm_year=2017, tm_mon=2, tm_mday=4, tm_hour=14, tm_min=6, tm_sec=42, tm_wday=5, tm_yday=35, tm_isdst=-1)
time.struct_time(tm_year=2017, tm_mon=1, tm_mday=13, tm_hour=17, tm_min=7, tm_sec=0, tm_wday=4, tm_yday=13, tm_isdst=-1)
time.struct_time(tm_year=2017, tm_mon=1, tm_mday=12, tm_hour=17, tm_min=7, tm_sec=0, tm_wday=3, tm_yday=12, tm_isdst=-1)
time.struct_time(tm_year=2017, tm_mon=2, tm_mday=4, tm_hour=14, tm_min=12, tm_sec=0, tm_wday=5, tm_yday=35, tm_isdst=-1)
time.struct_time(tm_year=2017, tm_mon=2, tm_mday=4, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=5, tm_yday=35, tm_isdst=-1)
2017
2
4
5
- struct_time格式时间转字符串格式时间
g = time.strftime('%Y-%m-%d %H:%M',time.localtime())
print(g)
结果是:
2019-07-08 15:27
- 时间戳格式时间转字符串格式时间
h = time.mktime(time.localtime())
print(h)
结果是:
1562571907.0
这是博客上的时间格式转换过程图:
image.png
但是,感觉在我处理过程中我都会转成struct_time格式,因为这样我才能够导出year,month,day,hour,minute,second,wday的值。
参考资料:
https://www.jb51.net/article/105840.htm
https://zhuanlan.zhihu.com/p/28209870
https://blog.csdn.net/xiaobing_blog/article/details/12591917
https://blog.csdn.net/LY_ysys629/article/details/73822716
https://www.cnblogs.com/jfl-xx/p/8024596.html
网友评论