目录
一、前言二、处理日期三、处理时间四、同时处理日期和时间五、时间戳相关六、处理字符串格式的时间一、前言
python中处理时间相关的库为datetime及time,均为内置库,绝大部份有关时间的操作都可以通过这两个库完成,如日期格式化、日期加减等。
二、处理日期
获取当前日期import datetime# 默认格式 yyyy-mm-ddprint(datetime.date.today())# -05-20
手动创建日期
# 创建日期,默认格式 yyyy-mm-dddt = datetime.date(, 5, 20)print(dt)# -05-20# 获取年、月、天dt.yeardt.monthdt.day
求两个日期间相差的天数
date1 = datetime.date(, 5, 20)date2 = datetime.date(, 5, 15)diff = date1 - date2print(diff.days)# 5
向前或后推多少天
dt = datetime.date.today()dt_ = dt - datetime.timedelta(days=1)# 等价的写法# dt_ = dt + datetime.timedelta(days=-1)print(dt_)# -05-19
日期格式化
需要用到strftime()方法,其返回一个格式化后的字符串
%d 指的是一个月中的某一天。如-5-20中, %d 返回 20。
%m 指的是一年中的某个月,注意是小写的m。
%Y 指的是年。字母 Y是大写的。
%y 指的是两位数格式的年份。在-5-20中,%y 返回 23。
%a 返回工作日的前三个字母,如 Sun ;
%A 返回工作日的完整名称,如 Sunday;
%b 返回月份的前三个字母,如 Oct ;
%B 返回月份的完整名称,如 October;
dt = datetime.date.today()print(dt.strftime("%Y/%m-%d"))# /05-20print(dt.strftime("%B---%Y-%m-%d")) # May----05-20
将字符串格式的日期转换为日期对象
from datetime import datetimedate_string = "0809"format = "%Y%m%d" #specifify the format of the date_string.dt = datetime.strptime(date_string, format)
三、处理时间
获取当前时间import time# 当前日期和时间current_time = time.ctime() print(current_time)# Sat May 20 23:01:20 # 只返回当前时间print(time.strftime("%H:%M:%S"))# 返回一个字符串 22:58:32
手动创建一个time对象
t = datetime.time(21, 2, 3)t.hourt.minutet.second
时间格式化
%I 将 24 小时时间格式转换为 12 小时格式。
%p 根据时间值返回 AM PM。
%H 返回时间值的小时数。
%M 返回时间值的分钟数,注意是大写的M,日期格式化中月份的小写的m。
%S 返回时间值的秒数。
print(t.strftime("%I"))# 09print(t.strftime("%I:%M:%S"))# 09:02:03
四、同时处理日期和时间
#获取当前日期和时间,格式 yyyy-mm-dd hh:mm:sstime = datetime.datetime.now()print(time)dt = datetime.datetime(, 5, 20, 20, 25, 22)print(dt)print(dt.strftime("%Y/%m/%d %H:%M:%S"))# /05/20 20:25:22
五、时间戳相关
时间戳是指格林威治时间1970年01月01日00时00分00秒开始计算所经过的秒数,是一个浮点数。
获取时间戳
import time# 获取当前时间戳print(time.time())# 获取指定时间对应的时间戳dtime = datetime.datetime(, 5, 20, 20, 25, 22)un_time = time.mktime(dtime.timetuple())print(un_time)
时间戳转日期
untime = 17845855722times = datetime.datetime.fromtimestamp(untime)print(times)# 2535-07-07 14:08:42
六、处理字符串格式的时间
tss1 = '-05-20 11:2:03'# 转为时间数组timeArray = time.strptime(tss1, "%Y-%m-%d %H:%M:%S")# time.struct_time(tm_year=, tm_mon=5, tm_mday=20, tm_hour=11, tm_min=2, tm_sec=3, tm_wday=5, tm_yday=140, tm_isdst=-1)print(timeArray)# timeArray可以调用tm_year等print(timeArray.tm_year) # # 转为时间戳timeStamp = int(time.mktime(timeArray))print(timeStamp) # 1684551723
其中timeArray为一个结构体,其属性如下:
tm_year (including century, e.g. 1998)
tm_mon (1-12)
tm_mday (1-31)
tm_hour (0-23)
tm_min (0-59)
tm_sec (0-59)
tm_wday 一周中的第几天,注意周一为第0天。
tm_yday 一年中的第多少天
DST 是否为夏令时间,一般用不上。
时间戳转timeArray,以下两种方式等价。
time.localtime()time.localtime(time.time())
参考文献:
Python 日期和时间函数使用指南
Python time和datetime时间戳和时间字符串相互转换