time模块

Python中表示时间的方式主要有三种:

时间戳(timestamp):表示的是从1970年1月1日00:00:00(Unix元年)开始按秒计算的偏移量。
格式化时间(Format String):经过字符串格式化后的时间表示形式,例如1970-1-1 12:00:00
结构化时间(struct_time):struct_time元组共有9个元素共九个元素:(年,月,日,时,分,秒,一年中第几周,一年中第几天,夏令时)

import time
# 1、时间戳形式
print(time.time())

# 2、格式化字符串形式
print(time.strftime("%Y-%m-%d %H:%M:%S"))  # strftime需要传入格式化的形式, 字符串格式
print(time.strftime("%F %X"))  # 也可以简写为这种形式

# 3、结构化时间形式
print(time.localtime())  # 本地时区的struct_time  (东八区,比世界时间晚八小时)
print(time.gmtime())  # UTC时区的struct_time

输出的结果为:

python 微秒定时器_格式化字符串


计算机认识的时间只能是’时间戳’格式,而程序员可处理的或者说人类能看懂的时间有: ‘格式化的时间字符串’,‘结构化的时间’ ,于是有了下图的转换关系:

python 微秒定时器_python 微秒定时器_02


我们真正需要的时间格式是格式化字符串的时间,因此常常需要对时间进行相应的转换

1、结构化时间转为时间戳、格式化字符串

import time
print("结构化时间: ", time.localtime())
print("结构化时间转为时间戳: ", time.mktime(time.localtime()))
print("结构化时间转为格式化字符串时间: ", time.strftime("%F %X", time.localtime()))

转换结果如下:

python 微秒定时器_时间戳_03

2、时间戳与格式化字符串相互转换

由上图图1可知时间戳和格式化字符串在time模块下没有直接的互相转换方式,因此需要借助结构化时间实现转换

import time
stamptime = time.time()
struct_time = time.localtime(stamptime)
format_time = time.strftime("%F %X", struct_time)
print("时间戳: ", stamptime)
print("结构化时间: ", struct_time)
print("字符串格式化时间: ", format_time)

python 微秒定时器_python 微秒定时器_04


可以看到时间戳转换为格式化字符串时间的结果。

逆转换方式同上,不再赘述。

应用场景:一般情况下,存储的时间是时间戳\格式化字符串时间,当需要对时间进行更改的时候(VIP续费等), 格式化字符串无法直接进行加减操作,因此需要转换成对应的时间戳形式进行加减,再用原格式进行写回。

3、拓展

time.asctime:用于将给定的日期和时间转换成 ASCII 码,把一个表示时间的元组或者struct_time表示为这种形式:‘Sun Jun 20 23:21:05 1993’。

time.ctime:把一个时间戳(按秒计算的浮点数)转化为time.asctime()的形式。如果参数未给或者为None的时候,将会默认time.time()为参数。它的作用相当于time.asctime(time.localtime(secs)),未指定secs则相当于time.asctime(time.localtime(time.time()))

python 微秒定时器_结构化_05

time.sleep(secs):线程推迟secs所指定的运行时间,单位为秒

datetime模块

1、datetime.datetime.now():返回当前的时间

import datetime
print(datetime.datetime.now())

2、datetime.timedelta

timedelta 对象表示两个 date 或者 time 的时间间隔。

class datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)
所有参数都是可选的并且默认为 0。 这些参数可以是整数或者浮点数,也可以是正数或者负数。

只有 days, seconds 和 microseconds 会存储在内部。 参数单位的换算规则如下:
1毫秒会转换成1000微秒。
1分钟会转换成60秒。
1小时会转换成3600秒。
1星期会转换成7天。

并且 days, seconds, microseconds 会经标准化处理以保证表达方式的唯一性,即:
0 <= microseconds < 1000000
0 <= seconds < 3600*24 (一天的秒数)
-999999999 <= days <= 999999999

具体使用:

print(datetime.datetime.now())
print(datetime.datetime.now() + datetime.timedelta(3))  # 当前时间+3天
print(datetime.datetime.now() + datetime.timedelta(-3))  # 当前时间-3天
print(datetime.datetime.now() + datetime.timedelta(hours=3))  # 当前时间+3小时
print(datetime.datetime.now() + datetime.timedelta(minutes=30))  # 当前时间+30分
print(datetime.datetime.now() + datetime.timedelta(weeks=1))  # 当前时间+7天

加减结果:

python 微秒定时器_python 微秒定时器_06