Python提供了多种处理方式,用来处理日期和时间类型。
系统时间获取及转换
Python的time模块提供了时间的访问和转换函数,下面介绍time模块常用的函数,其它函数请参考Python官方文档。
在介绍time模块提供的函数之前,先来认识struct_time结构,该结构是个9元组,结构中的值可以通过索引和属性名称访问。
struct_time结构表:
time模块常用函数概览表:
注释(1)
函数声明:
time()
函数返回当前系统时间,单位为秒,返回类型为浮点数,返回的系统时间是从 epoch 开始的秒数的时间值。
epoch具体日期的处理取决于操作系统。在 Windows 和大多数 Unix 系统中,epoch 是 1970 年 1 月 1 日 00:00:00 (UTC),并且闰秒将不计入从 epoch 开始的秒数。
函数返回的秒数可以作为参数,传递给 localtime() 函数获得本地时间struct_time结构对象。
案例代码:
>>> import time
>>> sec = time.time()
>>> print(sec)
1597473905.0032325
>>>
注释(2)
函数声明:
localtime([secs])
返回secs的当地时间struct_time结构对象,secs是可选参数,若没有提供secs参数,函数则使用 time() 所返回当前时间。
案例代码:
>>> import time
>>> sec = time.time()
>>> print(sec)
1597473905.0032325
>>> t = time.localtime(sec)
>>> print(t)
time.struct_time(
tm_year=2020,
tm_mon=8,
tm_mday=15,
tm_hour=14,
tm_min=45,
tm_sec=5,
tm_wday=5,
tm_yday=228,
tm_isdst=0
)
>>> # 通过索引或属性值访问struct_time结构对象的值
>>> print("当前时间为:%d:%d:%d" % (t.tm_year,t.tm_mon,t[2]))
当前时间为:2020:8:15
>>>
注释(3)
函数声明:
mktime(t)
这是 localtime() 的反函数,它的参数是 struct_time 或者完整的 9 元组,返回对应t的秒数。
案例代码:
>>> t = time.localtime()
>>> sec = time.mktime(t)
>>> print(sec)
1597474803.0
>>>
注释(4)
函数声明:
strftime(format[, t])
转换struct_time结构对象表示的时间到由 format 参数指定的字符串。如果未提供t,则使用由 localtime() 返回的当前时间,format 必须是一个字符串。
以下占位符可以写入 format 字符串中,写入的占位符将被struct_time结构对象对应的值替换。
格式字符串占位符表:
案例代码:
>>> import time
>>> t = time.localtime()
>>> fs = '%Y.%m.%d %H:%M:%S'
>>> print(time.strftime(fs,t))
2020.08.15 15:22:18
>>>
注释(5)
函数声明:
strptime(string[, format])
根据格式解析表示时间的字符串,返回当地时间struct_time结构对象。format 参数与strftime()函数的format参数使用相同的占位符。
案例代码:
>>> import time
>>> t = time.strptime("2020.08.15","%Y.%m.%d")
>>> print(t)
time.struct_time(
tm_year=2020,
tm_mon=8,
tm_mday=15,
tm_hour=0,
tm_min=0,
tm_sec=0,
tm_wday=5,
tm_yday=228,
tm_isdst=-1
)
>>>
注释(6)
函数声明:
asctime([t])
转换struct_time结构的时间到形式为:“Sun Jun 20 23:21:05 1993”的字符串。
案例代码:
>>> import time
>>> t = time.localtime()
>>> print(time.asctime(t))
Sat Aug 15 15:42:17 2020
>>>
注释(7)
thread_time()
返回当前线程的系统和用户CPU时间之和的值(单位秒),类型为浮点数。
案例代码:
import time
# 定义一个空的循环函数
def fn_loop(n):
for i in range(1,n):
pass;
if __name__=="__main__":
# 输出运行的时间(单位秒)
print("循环开始:" + str(time.thread_time()))
fn_loop(10000000)
# 输出循环后运行的时间(单位秒)
print("循环结束:" + str(time.thread_time()))
案例代码定义了一个空的循环函数,用于计算循环耗费的时间。在循环开始前输出程序已运行的时间,循环结束后,输出程序已运行的时间,两者时间的差值就是循环耗费的时间。
程序执行结果如下所示:
循环开始:0.140625
循环结束:0.296875
date对象
date 对象是date类的实例化,date类包含在datetime模块内,它主要处理公历的年、月、日。
下表列出了date对象的构造方法。
注释(1)
构造方法声明:
date(year, month, day)
返回一个date对象,参数为年、月、日。参数必须是在下面范围内的整数:
1<=year<=9999
1<=month<=12
1<=day<=給定年月对应的天数
若传入的参数不在上述范围内,引发ValueError 异常。
案例代码:
>>> import datetime
>>> #实例化date对象
>>> d = datetime.date(2020,8,16)
>>>输出变量d的类型
>>> type(d)
<class 'datetime.date'>
>>> print(d)
2020-08-16
>>>
注释(2)
构造方法声明:
datetime.today()
该构造方法是date类的静态方法,可以直接使用类名访问,该方法返回表示当前系统时间的 date 对象。
案例代码:
>>> import datetime
>>> d = datetime.date.today()
>>> print(d)
2020-08-17
>>>
date对象的主要属性如下表所示:
date对象的主要方法如下表所示:
注释(2)
方法声明:
timetuple()
返回当地时间struct_time结构对象。
案例代码:
>>> import datetime
>>> d = datetime.date(2020,8,16)
>>> print(d.timetuple())
time.struct_time(
tm_year=2020,
tm_mon=8,
tm_mday=16,
tm_hour=0,
tm_min=0,
tm_sec=0,
tm_wday=6,
tm_yday=229,
tm_isdst=-1)
>>>
注释(6)
方法声明:
strftime(format)
返回一个由显式格式字符串所指明的代表日期和时间的字符串,格式字符串占位符的完整列表参见前面的格式字符串占位符表。
案例代码:
>>> import datetime
>>> d = date(2020,8,16)
>>> print(d.strftime("%Y.%m.%d"))
2020.08.16
>>>
datetime对象
datetime对象描述了完整的日期和时间,方便开发人员编写处理时间的代码。
下表列出了datetime对象的构造方法。
注释(1)
构造方法声明:
datetime(
year,
month,
day,
hour=0,
minute=0,
second=0,
microsecond=0,
tzinfo=None,
*,
fold=0)
返回一个datetime对象,参数取值范围参见date对象和time对象的构造方法。
year, month, day参数必须传入,其它参数可以采用默认值。
案例代码:
>>> import datetime
>>> t = datetime.datetime(2020,8,17,13,20,35)
>>> print(t)
2020-08-17 13:20:35
>>>
注释(2)
构造方法声明:
datetiem.today()
该构造方法是datetime类的静态方法,可以直接使用类名访问,该方法返回表示当前系统时间的 datetime 对象。
案例代码:
>>> import datetime
>>> t = datetime.datetime.today()
>>> print(t)
2020-08-17 13:17:15.309852
>>>
注释(3)
构造方法声明:
datetiem.now()
该构造方法是datetime类的静态方法,可以直接使用类名访问,该方法返回表示当前系统时间的 date和time 对象。
案例代码:
>>> import datetime
>>>t = datetime.datetime.now()
>>>d = t.date()
>>> type(d)
<class 'datetime.date'>
>>>
datetime对象的主要属性如下表所示:
datetime对象的主要方法如下表所示:
注释(3)
方法声明:
timetuple()
该方法返回一个表示本地系统时间的struct_time结构对象。
案例代码:
>>> import datetime
>>> d = datetime.datetime.now()
>>> tt = d.timetuple()
>>> for it in tt:
print(it)
注释(4)
方法声明:
isoformat(sep='T', timespec='auto')
返回表示为下列 ISO 8601 格式之一的时间字符串:
YYYY-MM-DDTHH:MM:SS.ffffff,如果 microsecond 不为 0
YYYY-MM-DDTHH:MM:SS,如果 microsecond 为 0
案例代码:
>>> import datetiem
>>> t = datetime.datetime.now()
>>> print(t.isoformat())
2020-08-17T14:04:42.030807
>>>
注释(5)
方法声明:
ctime()
返回一个表示日期和时间的字符串。
案例代码:
>>> import datetiem
>>> t = datetime.datetime.now()
>>> print(t.ctime())
Mon Aug 17 14:04:42 2020
>>>
注释(6)
方法声明:
strftime(format)
返回一个由显式格式字符串所指明的代表日期和时间的字符串,格式字符串占位符的完整列表参见前面的格式字符串占位符表。
案例代码:
>>> import datetiem
>>> t = datetime.datetime.now()
>>> t.strftime("%A, %d. %B %Y %I:%M%p")
'Monday, 17. August 2020 02:04PM'
>>>