datetime模块
datetime有datetime.datetime和datetime.date两个功能模块
import datetime print(datetime.datetime) # <class 'datetime.datetime'> now_time = datetime.datetime.now() # 现在的时间 print(now_time) # 2018-11-27 23:06:37.154336 strf = now_time.strftime('%d-%m-%Y %H:%M:%S') #自定义时间格式 print(strf) #27-11-2018 23:06:37 #datetime.date print(datetime.date.today()) 2021-07-14
只能调整的字段:weeks days hours minutes seconds
print(datetime.datetime.now() + datetime.timedelta(weeks=3)) # 三周后 print(datetime.datetime.now() + datetime.timedelta(weeks=-3)) # 三周前 print(datetime.datetime.now() + datetime.timedelta(days=3)) # 三天后 print(datetime.datetime.now() + datetime.timedelta(days=-3)) # 三天前 print(datetime.datetime.now() + datetime.timedelta(hours=5)) # 5小时后 print(datetime.datetime.now() + datetime.timedelta(hours=-5)) # 5小时前 print(datetime.datetime.now() + datetime.timedelta(minutes=15)) # 15分钟后 print(datetime.datetime.now() + datetime.timedelta(minutes=-15)) # 15分钟前 print(datetime.datetime.now() + datetime.timedelta(seconds=70)) # 70秒后 print(datetime.datetime.now() + datetime.timedelta(seconds=-70)) # 70秒前
可直接调整到指定的 年 月 日 时 分 秒 等
current_time = datetime.datetime.now() print(current_time.replace(year=1977)) # 直接调整到1977年 print(current_time.replace(month=1)) # 直接调整到1月份 print(current_time.replace(year=1989,month=4,day=25)) # 1989-04-25 18:49:05.898601 print(datetime.datetime.now().replace(year=2010)) #将年份设置为2010年 # 2010-11-27 23:16:19.293633 print(datetime.datetime.now().replace(month=1)) #将月份设置为1月 # 2018-01-27 23:16:19.293633 print(datetime.datetime.now().replace(day=1)) #将日期调整为1号 # 2018-11-01 23:16:19.293633 print(datetime.datetime.now().replace(year=2010, month=10, day=10, hour=10, minute=10, second=10)) #自定义年月日时分秒 # 2010-10-10 10:10:10.293633
将时间转换成时间戳
print(datetime.datetime.now().timestamp()) 1628072595.420438
将时间戳转化成时间,使用date可以精确到日期,使用datetime可以精确到秒
print(datetime.date.fromtimestamp(1628072595.420438)) 2021-08-04 print(datetime.datetime.fromtimestamp(1628072595.420438)) 2021-08-04 18:23:15.420438
例子:两个datetime.datetime格式的时间相减,可以先转换成时间戳,可得到相差的秒数。
(expire_datetime.timestamp()-today.timestamp())/3600/24 6.9609116317359385
也可以直接相减
>>> t1 = datetime.datetime.now() >>> t2 = datetime.datetime.now() >>> t1 datetime.datetime(2021, 8, 4, 18, 48, 19, 409559) >>> t2 datetime.datetime(2021, 8, 4, 18, 48, 24, 423099) >>> t2-t1 datetime.timedelta(0, 5, 13540) >>> (t2-t1).days 0 >>> (t2-t1).seconds 5
将结构化时间转换成格式化时间 strptime
import datetime strp = datetime.datetime.strptime('Aug-23-18 19:51', '%b-%d-%y %H:%M') print(strp) 2018-08-23 19:51:00
将格式化时间转换成结构化时间 strftime
now = datetime.datetime.now() strf = now.strftime('%Y-%m-%d %H:%M:%S') print(strf) 2019-12-23 17:40:25 yestarday = (datetime.datetime.now() + datetime.timedelta(days=-1)).strftime('%Y%m%d') print(yestarday) 20191222 print(type(yestarday)) <class 'str'>
UTC格式转换
import datetime utc = "2017-07-28T08:28:47.776Z" UTC_FORMAT = "%Y-%m-%dT%H:%M:%S.%fZ" utcTime = datetime.datetime.strptime(utc, UTC_FORMAT) print(utcTime) 2017-07-28 08:28:47.776000 注意是strptime,不是strftime
Python datetime模块中strptime和strftime的区别和使用方法
strptime和strftime是两个比较容易搞混的函数
strptime:
p表示parse,表示分析的意思,所以strptime是给定一个时间字符串和分析模式,返回一个时间对象。
strftime:
f表示format,表示格式化,和strptime正好相反,要求给一个时间对象和输出格式,返回一个时间字符串
import datetime time1 = datetime.datetime.strptime('2019/07/04 14:47', '%Y/%m/%d %H:%M') print(type(time1), time1)
返回结果为<class 'datetime.datetime'> 2019-07-04 14:47:00
可以看到strptime函数返回结果类型为datetime类的时间对象,将字符串按照给定的模式分析成了一个时间对象。
time2 = datetime.datetime.strftime(time1, '%Y@%m@%d %H:%M') time2 = time1.strftime('%Y@%m@%d %H:%M')
#两种写法都是一样的,这里time1即上面代码返回的时间对象
print(type(time2), time2)
返回结果为<class 'str'> 2019@07@04 14:47
可以看到strftime返回类型为字符串,并按照给定的格式打印。