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
作者:小家电维修
转世燕还故榻,为你衔来二月的花。