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返回类型为字符串,并按照给定的格式打印。

posted on 2021-11-25 14:16  longfei2021  阅读(168)  评论(0编辑  收藏  举报