时间和日期(Python)
一、基本概念
1、时间戳
- 一个能表示一份数据在某个特定时间之前已经存在的、完整的、可验证的数据,通常是一个字符序列,唯一地标识某一刻的时间
- 是指格林尼治时间1970年01月01日00时00分00秒(北京时间1970年01月01日8时00分00秒)至现在的总秒数
- 是一个能够表示一份数据在一个特定时间点已经存在的完整的可验证的数据,它的提出为用户提供了一份电子证据,以证明用户某些数据的产生时间
- 是一个经加密形成的凭证文档,包括三个部分:
- 需加时间戳的文件的摘要(Digest)
- DTS(Decode Time Stamp,解码时间戳)收到文件的日期和时间 DTS的数字签名
- 一般来说,时间戳产生的过程为:首先用户需要加时间戳的文件用Hash编码加密形成摘要,然后将摘要发送到DTS,DTS在加入了收到文件摘要的日期和时间信息后再对该文件加密(数字签名),然后送回用户
2、时间日期格式化符号
3、时间元组
-
很多Python函数用一个元组装起来的九组数字处理时间
二、time模块
- time函数
- 用于返回当前时间的时间戳,返回值为浮点数
- localtime函数
- 用于将时间戳格式化为本地时间,返回 struct_time 对象
该函数的一个参数用于接收时间戳,如果调用函数时不提供时间戳,则默认使用当前时间戳 - mktime函数
- 接收 struct_time 对象作为参数,返回用秒数来表示时间的浮点数
- 参数可以是结构化的时间,也可以是完整的9组元素
- gmtime函数
- 用于将一个时间戳转换为UTC时区(0时区)的 struct_time
- 可选的参数 sec 表示从1970-1-1以来的秒数
- 默认值为 time.time(),函数返回time.struct_time类型的对象
- asctime函数
- asctime 函数接收时间元组并返回一个可读的形式为“Tue Jul 17 17:03:01 2018”(2018年7月17日周二17时03分01秒)的24个字符的字符串
- 参数可以是9个元素的元组,也可以是time_struct对象
- ctime函数
- 用于把一个时间戳转化为9个元素的元组的形式
- 无参或值为None时,默认time.time()为参数,它的作用相当于执行asctime(localtime(secs))
- sleep函数
- 用于推迟调用线程的运行,参数secs为秒数,表示进程挂起的时间
- clock函数
- 以浮点数计算的秒数返回当前的CPU时间用来衡量不同程序的耗时
- 在Unix系统上,它返回的是进程时间,用时间戳表示
- 在Windows系统中第一次调用返回的是进程运行的时间,第二次调用返回的是第一次调用以后到现在的运行时间
-
反对警告:时间.时钟在Python 3.3中已被反对,并将从Python
3.8中删除:请改用time.perf_counter或time.process_time - strftime函数
- 用于接收时间元组,并返回以可读字符串表示的当地时间,格式由参数format决定
- strptime函数
- 能够根据指定的格式把一个时间字符串解析为时间元组
三、datatime模块
1、date对象
- datetime包含了日期和时间的所有信息,支持从0001到9999年之间的所有日期
- datetime模块定义了两个常量:datetime.MINYEAR和datetime.MAXYEAR,分别表示了1和9999,即datetime模块支持的最小年份和最大年份
- date对象表示在日历中的一个日期(包含年、月、日)
- date对象的构造函数需要传入三个参数(year、month、day),其中year大于等于1小于等于9999,month只能在1~12中取值,day需要是一个有效的数字并且这一天在日历中真实存在
- date的任意一个参数超出了有效日期的范围都会抛出异常
-
创建date对象
-
Today方法返回当天日期
-
weekdays方法返回当前星期数(0为星期一,以此类推)
-
isoweekdays方法和weekdays方法相似(1表示星期一)
-
isoformat方法返回日期为ISO格式,即(YYYY-MM-DD)的字符串(%04d-%02d-%02d),直接打印date对象调用的就是isoformat方法
-
strftime方法可以格式化输出日期
2、time对象
- time对象表示的是一天中的(本地)时间,与任何特定日期无关,可以通过tzinfo(时区)对象进行调整
-
time对象的构造函数接收时、分、秒、微秒、时区和信息等参数,并且所有参数都是可选的(默认为0或None)
-
time有两个常量min和max,分别对应两个time实例来表示time支持的最大值和最小值(25:59:59:999999和00:00:00)
- resolution代表time对象的最小单位,值为1微秒
-
isoformat返回时间为ISO格式(直接打印time对象调用的就是isoformat方法)
-
strftime方法可以格式化输出时间
3、datetime对象
-
datetime是date和time的结合体,包括date与time的所有信息(常用的时间处理就是datetime)
-
datetime对象的参数的取值范围和date以及time的对象一致,参数也是两者的结合(年、月、日三个参数是必须的,其他参数都是可选的)
-
-
today方法返回一个表示当前本地时间的datetime对象,并且对应的tzinfo(时区)应该是None
-
now方法返回一个表示当前本地时间的datetime对象,如果提供了参数tzinfo,则获取tzinfo参数所指时区的本地时间,如果不传递tzinfo则个today作用相同
-
utcnow方法返回一个当前UTC(0时区)的datetime对象
-
fromtimestamp方法根据时间戳创建一个datetime对象,可选参数tzinfo指定时区信息
-
date方法获取date对象,time方法获取time对象
-
combine方法根据date和time,创建一个datetime对象
-
strftime方法可以格式化输出日期时间
4、timedelta对象
- 表示的是两个日期或者时间的差,属性包含:日期,秒,微秒,毫秒,分钟,小时,和星期
-
所有的属性都可选并且默认为0
5、tzinfo对象
-
tzinfo是一个时区对象的抽象类,datetime和time对象使用它来提供可自定义的时间调整概念(如时区或者夏令时)
-
tzinfo类不能直接使用,但是可以使用datetime.timezone生成,
datetime.timezone.utc实现了UTC时区的tzinfo实例 -
datetime.timezone是tzinfo的子类,所以也可以用datetime.timezone类来实现想要的时区信息
-
构造datetime.timezone对象时只需要传入和UTC时间相隔的timedelta对象即可