使用Python的time函数处理时间和日期
Python是一种面向对象的高级编程语言,它被广泛用于数据科学、机器学习、深度学习等各种领域。在实际开发中,经常需要处理时间和日期。Python提供了time模块、datetime模块和calendar模块等,可以方便地处理日期和时间相关的操作。本文主要介绍time模块的相关用法。
time模块
time模块提供了许多函数来操作时间。下面是一些常用的函数:
- time():返回当前时间的时间戳(从1970年1月1日开始的秒数)。
- localtime([secs]):将时间戳转换为本地时间(结构化时间)。
- asctime([t]):将结构化时间转换为字符串格式(Wed Jun 15 12:00:00 2016)。
- strftime(format[, t]):将结构化时间转换为指定格式的字符串。
- sleep(secs):让程序睡眠指定秒数。
下面是一些时间的例子:
import time
#获取当前时间戳
secs = time.time()
print(secs)
#输出:1610619882.2342513
#将时间戳转换为结构化时间
t = time.localtime()
print(t)
#输出:time.struct_time(tm_year=2021, tm_mon=1, tm_mday=15, tm_hour=15, tm_min=44, tm_sec=42, tm_wday=4, tm_yday=15, tm_isdst=0)
#将结构化时间转换为字符串格式
t_str = time.asctime(t)
print(t_str)
#输出:Fri Jan 15 15:44:42 2021
#将结构化时间转换为指定格式的字符串
t_str2 = time.strftime('%Y-%m-%d %H:%M:%S', t)
print(t_str2)
#输出:2021-01-15 15:44:42
#让程序睡眠2秒
time.sleep(2)
#再次获取当前时间戳
secs2 = time.time()
print(secs2)
#输出:1610619884.236625
结构化时间
在Python中,时间和日期都是使用结构化时间(struct_time)来表示。结构化时间是一个元组,包含以下9个字段:
- tm_year:年份,如2021。
- tm_mon:月份,范围是1~12。
- tm_mday:日期,范围是1~31。
- tm_hour:小时,范围是0~23。
- tm_min:分钟,范围是0~59。
- tm_sec:秒数,范围是0~61(60和61用于闰秒)。
- tm_wday:星期几,范围是0~6(0表示星期一)。
- tm_yday:该年的第几天,范围是1~366。
- tm_isdst:是否为夏令时,如果是,则值为1;否则为0。
可以使用元组的方式或点号的方式来访问结构化时间的各个字段。
import time
t = time.localtime()
print(t)
#输出:time.struct_time(tm_year=2021, tm_mon=1, tm_mday=15, tm_hour=16, tm_min=16, tm_sec=17, tm_wday=4, tm_yday=15, tm_isdst=0)
print(t.tm_year) #输出:2021
print(t[1]) #输出:1
日期和时间格式化
strftime()函数可以将结构化时间格式化为指定格式的字符串,具体格式如下表所示:
%a 本地(locale)简化星期名称
%A 本地完整星期名称
%b 本地简化月份名称
%B 本地完整月份名称
%c 本地相应的日期和时间表示
%d 月内中的一天(01~31)
%H 24小时制小时数(00~23)
%I 12小时制小时数(01~12)
%j 年内的一天(001~366)
%m 月份(01~12)
%M 分钟数(00~59)
%p 本地am或pm的等价符
%S 秒(00~61,60和61用于闰秒)
%U 一年中的星期数(00~53,星期天为一周的开始)
%w 星期(0~6),星期天为0
%W 一年中的星期数(00~53,星期一为一周的开始)
%x 本地相应日期
%X 本地相应时间
%y 去掉世纪的年份(00~99)
%Y 完整的年份
%z 时区以+HHMM或-HHMM表示
%Z 时区的名称(如果是本地时间则为空字符串)
%% %号本身
例如,将日期时间格式化为'2021-01-15 16:16:17'的字符串。
import time
t = time.localtime()
t_str = time.strftime("%Y-%m-%d %H:%M:%S", t)
print(t_str)
#输出:2021-01-15 16:16:17
日期时间转换
有时需要将字符串格式的时间转换为时间戳或结构化时间。可以使用strptime()函数将字符串解析为结构化时间,具体用法如下:
datetime.strptime(date_string, format)
其中,date_string是待解析的字符串,format是日期时间格式。被解析的字符串格式必须与format指定的格式一致,否则会抛出异常。如果解析成功,则返回结构化时间。
例如,将字符串'2021-01-15 16:16:17'转换为时间戳。
import time
from datetime import datetime
dt = datetime.strptime('2021-01-15 16:16:17', '%Y-%m-%d %H:%M:%S')
secs = time.mktime(dt.timetuple())
print(secs)
#输出:1610712977.0
如果需要将时间戳转换为结构化时间,可以使用localtime()函数,具体用法如下:
time.localtime([secs])
其中,secs是时间戳,默认值为当前时间戳。如果给定了时间戳,则返回对应的结构化时间;否则返回当前时间的结构化时间。
例如,将时间戳1610712977.0转换为结构化时间。
import time
t = time.localtime(1610712977.0)
print(t)
#输出:time.struct_time(tm_year=2021, tm_mon=1, tm_mday=15, tm_hour=16, tm_min=16, tm_sec=17, tm_wday=4, tm_yday=15, tm_isdst=0)
小结
Python的time模块提供了许多与时间相关的函数,可以方便地进行时间戳、结构化时间、字符串格式等之间的转换。结构化时间是一个元组,包含9个字段,可以通过元组的方式或点号的方式来访问。通过strftime()函数,可以将结构化时间格式化为指定格式的字符串。通过strptime()函数,可以将字符串解析为结构化时间。
