Python中表示时间的两种方式:
1.时间戳:相对于1970.1.1 00:00:00以秒计算的偏移量,唯一的
2.时间元组struct_time:共有9个元素
- tm_year:年1-12
- tm_mon:月1-12
- tm_mday:日1-31
- tm_hour:时0-23
- tm_min:分0-59
- tm_sec:秒0-59
- tm_wday:星期0-6(0表示周日)
- tm_day:一年中的第几天1-366
- tm_isdst:是否是夏令,默认为-1
1.time
在python文档中,time是归类在常规操作系统服务中,它提供的功能更加接近于操作系统层面。其所能表述的日期范围被限定在1970-2038之间,如果需要表述范围之外的日期,可能需要考虑使用datetime模块更好。
以下是time的一些简单的常用方法。
1.time.sleep(sec):推迟指定时间sec后继续运行
2.time.localtime([sec]):将一个时间戳转化成一个当时时区的struct_time,如果sec参数未输入,则以当前时间为转化标准
3.time.strftime(format[,t]):将指定的struct_time(默认为当前时间),根据指定的格式化字符串输出,把一个代表时间的元组或者struct_time转化为格式化的时间字符串。如果t为指定,将传入time.localtime()。如果元组中任何一个元素越界,ValueError的错误将会被抛出
4.time.time():返回当前时间的时间戳(以秒表示的浮点数)
5.time.mktime(t):将一个struct_time转换为时间戳
6.time.gmtime([sec]):将一个时间戳转化为UTC时区(0时区)的struct_time
7.time.clock():不同系统含义不同。UNIX——返回进程时间,WINS第一次调用返回进程运行的实际时间,第二次调用是自第一次调用以后到现在的运行时间
由于该方法依赖操作系统,在 Python 3.3 以后不被推荐,而在 3.8 版本中被移除,需使用下列两个函数替代。
8.time.asctime([t])把一个时间的元组或者struct_time表示为“Sun Jun 20 23:21:05 1993”,如果无参数,则会把time.localtime()作为参数传入
9.time.ctime([sec]):把一个时间戳转化为time.asctime()的形式,如果无参数或者为None时,则会把time.time()作为参数传入。它的作用相当于time.asctime(time.localtime(sec))
2.datetime
datetime比time高级了不少,可以理解为datetime基于time进行了封装,提供了更多实用的函数,主要包含一下几类:
- timedelta:主要用于计算时间跨度
- tzinfo:时区相关
- time:只关注时间
- date:只关注日期
- datetime:同时有时间和日期
- datezone:用于表示相对于 世界标准时间(UTC)的偏移量。
在实际使用中,用得比较多的是datetime.datetime和datetime.timedelta,另外两个datetime.date和datetime.time实际使用和datetime.datetime并无太大差别。具体的会在本章后面详细列出实验案例,主要还是使用timedelta和datetime来计算一些时间和比较。如下
3.常用实例
3.1 time
time.time()
获取当前时间戳浮点型
time.strftime("%Y-%m-%d %H:%M:%S")
按指定格式输出当前时间字符串
time.strptime()
将时间字符串 转换为 时间数组
time.mktime(变量,时间格式)
将时间数组 转换成 时间戳
3.2 datetime
3.2.1 datetime
datetime.now()
datetime.strftime(tt, “%Y-%m-%d %H:%M:%S”)
将时间 转换成 时间字符串
datetime.strptime(tt, “%Y-%m-%d %H:%M:%S”)
将时间字符串 转换 时间 (class ‘datetime.datetime’)
datetime类型.timetuple()
将时间类型 转换成 时间元祖
3.2.2 time
time()
3.2.3 date
date.today()
3.3 生成日期
3.3.1 直接生成当前日期
3.3.2 由时间戳或者Gregorian日历来生成
3.3.3 由现有时间创建
3.4 时间的计算
计算时间差(转换为数值)
3.5 时间的比较
3.5.1 同类型的比较
可以看到,想要比较时间,那必须都是时间类型的,目前演示的是都是同种类型的比较,比如date.today()对比
3.5.2 不同类型比较
严格来说,这里不能叫做不同类型,只是转换到了最后datetime.now()比使用datestrptime转换的结果多了一个时间戳,但是这样子是可以比较的。
为什么不同相同的time直接比较?因为目前本人没有发现time可以直接转换为时间类型的函数。如果有的话,麻烦各位大佬指出。
3.6 格式化和解析
默认格式:YYYY-MM-DDTHH:MM:SS.mmmmm
可以用strftime()生成其他格式,strptime可以将格式化的字符串转化成datetime实例
4.总结
由于是写作业的时候需要使用到时间模块,所以这里做一个简单的记录。目前看来,个人感觉时间模块简单而又复杂,有time,date,datetime,搞的人真的很乱,比如time.strftime得到的结果是字符串,不方便时间类型比较。datetime.date.today()又只能输出年月日,没有时分秒,并且模块功能也不多,datetime.datetime.now()输出成为时间格式,但是后面又多个时间戳,如果需要时间类型比较就需要各种转换,比如3.5.2章节就需要把time.strftime的字符串转换为datetime的类型然后在比较时间大小。看来每次需要用到时间就要回来翻翻笔记了,或者去查看官网文档了: https://docs.python.org/zh-cn/3/library/datetime.html#datetime-objects