构造(获取)日期与时间对象
>>> import datetime
#指定年月日,返回date类型的对象,可用d.yer,d.month,d.day获取其年月日属性
d=datetime.date(2022,1,1)
d,type(d),d.year,d.month,d.day
#返回(datetime.date(2022, 1, 1), datetime.date, 2022, 1, 1)
#指定时分秒、微秒,返回time类型的对象,可用t.hour,t.minute,t.second,t.microsecond获取其属性
t=datetime.time(12,30,10,999999)
t,type(t),t.hour,t.minute,t.second,t.microsecond
#返回(datetime.time(12, 30, 10, 999999), datetime.time, 12, 30, 10, 999999)
#指定年月日,返回datetime类型的对象,时分秒属性默认为0
t1=datetime.datetime(2022,1,1)
t1,type(t1),t1.year,t1.month,t1.day,t1.hour,t1.minute,t1.second,t1.microsecond
#返回(datetime.datetime(2022, 1, 1, 0, 0), datetime.datetime, 2022, 1, 1, 0, 0, 0, 0)
#指定年月日时分秒,返回datetime类型的对象
t2=datetime.datetime(2022,1,1,12,5,30,9999)
t2,type(t2),t2.year,t2.month,t2.day,t2.hour,t2.minute,t2.second,t2.microsecond
#返回(datetime.datetime(2022, 1, 1, 12, 5, 30, 9999), datetime.datetime, 2022, 1, 1, 12,5, 30, 9999)
#获取系统当前时间,返回datetime类型对象
n=datetime.datetime.now() #返回值同datetime.datetime.toady()
n,type(n),n.year,n.month,n.day,n.hour,n.minute,n.second,n.microsecond
#返回(datetime.datetime(2022, 2, 8, 21, 16, 12, 7536), datetime.datetime, 2022, 2, 8, 21, 16, 12, 7536)
日期时间运算:获取一定时间段前(后)的日期(时间)
构造datetime.timedelta()对象支持用days,hours,minutes,seconds 4个 时间单位,默认为days。可以与datetime.date或datetime.datetime类型的对象相加:
datetime.timedelta(1)#datetime.timedelta(days=1)
datetime.timedelta(days=1)#datetime.timedelta(days=1)
datetime.timedelta(hours=1)#datetime.timedelta(seconds=3600)
datetime.timedelta(minutes=1)#datetime.timedelta(seconds=60)
datetime.timedelta(seconds=1)#datetime.timedelta(seconds=1)
datetime.date.today()+datetime.timedelta(days=-50)#datetime.date(2021, 2, 27)
datetime.datetime.now()+datetime.timedelta(seconds=1)
#datetime.datetime(2024, 4, 4, 15, 47, 42, 163563)
两个datetime.date对象相减或两个datetime.datetime对象相减得到datetime.timedelta对象,仅支持days,seconds,microseconds属性:
t1=datetime.date(2024,4,2)
t2=datetime.date(2024,4,5)
delta1=t2-t1
delta1,delta1.days,delta1.seconds,delta1.microseconds
#datetime.timedelta(days=3), 3, 0, 0
t3=datetime.datetime(2024,4,2)
t4=datetime.datetime(2024,4,3,0,1)
delta2=t4-t3
delta2,delta2.days,delta2.seconds,delta2.microseconds
#datetime.timedelta(days=1, seconds=60), 1, 60, 0
日期时间与字符串格式、数字格式相互转化
符号 | 含义 | 符号 | 含义 |
%Y | 4位数字年份(0001-9999) | %y | 2位数字年份(如24) |
%m | 2位数字月份(01-12) | ||
%d | 2位数字日期(01-31) | ||
%H | 2位数字小时(00-23) | %I | 2位数字小时(01-12) |
%M | 2位数字分钟(00-59) | ||
%S | 2位数字秒钟(00-59) |
#日期时间转化为字符串
d=datetime.date(2022,1,23)
d.strftime('%Y-%m-%d'),d.strftime('%y%m%d')
#返回('2022-01-23', '220123')
#字符串转化为日期时间
a=datetime.datetime.strptime('2022-01-01','%Y-%m-%d')
a,type(a)
#(datetime.datetime(2022, 1, 1, 0, 0), datetime.datetime)
datetime.datetime.strptime('2024-01-12 15:00:00','%Y-%m-%d %H:%M:%S')
#datetime.datetime(2024, 1, 12, 15, 0)
datetime.datetime.strptime('2024-01-12-15:00:00','%Y-%m-%d-%H:%M:%S')
#datetime.datetime(2024, 1, 12, 15, 0)
datetime.datetime.strptime('2024-01-12-01:00:00','%Y-%m-%d-%I:%M:%S')
#datetime.datetime(2024, 1, 12, 1, 0)
datetime.datetime.strptime('2024/01/12','%Y/%m/%d')
#datetime.datetime(2024, 1, 12, 0, 0)
#日期转化为数字,可以画时间序列图
from matplotlib import dates
d1=datetime.date(2022,1,1)
d2=datetime.date(2022,1,2)
dates.date2num(d1),dates.date2num(d2)
#返回(738156.0, 738157.0),可见1为1天
时间转化为时间戳
>>> import datetime,time
>>> t=datetime.datetime.now()
>>> t
datetime.datetime(2023, 10, 10, 0, 46, 24, 773876)
>>> t_str=t.strftime('%Y-%m-%d %H:%M:%S')
>>> t_str
'2023-10-10 00:46:24'
>>> structed_time=time.strptime(t_str,'%Y-%m-%d %H:%M:%S') #获取结构化时间
>>> structed_time
time.struct_time(tm_year=2023, tm_mon=10, tm_mday=10, tm_hour=0, tm_min=46, tm_sec=24, tm_wday=1, tm_yday=283, tm_isdst=-1)
>>> time.mktime(structed_time)
1696869984.0
>>> int(time.mktime(structed_time)) #10位时间戳
1696869984
>>> int(time.mktime(structed_time)*1000) #13位时间戳
1696869984000