python中datetime模块时间的使用

python中,有两个模块用来表示时间,一个是time模块,一个是datetime模块。之前我们讲述过time模块怎么使用时间,这篇我们看下datetime模块怎么表达时间。

datetime类型是一个比较综合的类型,它下面有子包datetime.date专门用来表示日期,datetime.time专门用来表示时间,而datetime.datetime就表示日期时间,其中还有datetime.datetime.now()和datetime.datetime.today()来表示当前时间,这点和time.time(), time.localtime()表示当前时间是类似的。

1. datetime.date():这是一个构造函数,需要传参年,月,日的值来构造一个日期

d1 = datetime.date(2025, 1, 2)
print('新构造的日期是:', d1)

输出: 

新构造的日期是: 2025-01-02

2. datetime.time(): 这也是一个构造函数,需要传参时、分、秒的值来构造一个时间

t1 = datetime.time(12, 22, 29)
print('新构造的时间是:', t1)

输出:

新构造的时间是: 12:22:28

3. datetime.datetime(): 这同上,需要分别传参年、月、日、时、分、秒来构造一个日期时间

dt1 = datetime.datetime(2025, 1, 2, 12, 25, 29)
    print('新构造的日期时间是:', dt1)

输出:

新构造的日期时间是: 2025-01-02 12:25:29

4. datetime模块的时间格式化和反格式化,分别用到datetime.strftime()和datetime.strptime()函数

ft = dt1.strftime('%Y-%m-%d %H:%M:%S')
print('字符串时间是:', ft)

o_dt = datetime.datetime.strptime(ft, '%Y-%m-%d %H:%M:%S')
print('从字符串转换为datetime: ', o_dt)

输出:

字符串时间是: 2025-01-02 12:25:29
从字符串转换为datetime类型: 2025-01-02 12:25:29

5. datetime模块的时间序列【时间元组】

例子:

dt_tuple = dt1.timetuple()  # 就直接用timetuple()获取时间序列
dt1_tuple = datetime.datetime.timetuple(dt1)  # 这种方式也能获取时间序列
print('时间序列/元组是:', dt_tuple, '\n', dt1_tuple)

输出:

时间序列/元组是: time.struct_time(tm_year=2025, tm_mon=1, tm_mday=2, tm_hour=12, tm_min=25, tm_sec=29, tm_wday=3, tm_yday=2, tm_isdst=-1) 
 time.struct_time(tm_year=2025, tm_mon=1, tm_mday=2, tm_hour=12, tm_min=25, tm_sec=29, tm_wday=3, tm_yday=2, tm_isdst=-1)

还可以获取时间序列/元组里的值。如dt_tuple.tm_mon就会返回月份值1,dt_tuple.tm_wday返回3即周四。

tm_mon = dt_tuple.tm_mon
print('月份为:', tm_mon)

tm_wday = dt1_tuple.tm_wday
print('星期为:', int(tm_wday)+1)

tm_yday = dt1_tuple.tm_yday
print(f'%s 是一年中的第 %d 天' % (ft, tm_yday))

输出:
月份为: 1
星期为: 4
2025-01-02 12:25:29 是一年中的第 2 天

6. 1)strftime() 格式化时间--字符串的日期时间对象

strftime()是在date, datetime, time类下定义的。该方法根据给定的日期、日期时间和时间创建格式化的字符串。

print(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'))
print(datetime.date.today().strftime('%b %d %Y'))
print(datetime.time(18, 48, 32).strftime('%H:%M:%S'))

输出:

2025-01-02 14:10:21
Jan 02 2025
18:48:32

2) strptime()---将字符串类型转换为时间类型【即datetime类型】

date_str = '14 Nov, 2022'
date_obj = datetime.datetime.strptime(date_str, '%d %b, %Y')
print(date_obj)
print(type(date_obj))

输出:

2022-11-14 00:00:00

7. datetime和time之间的转换:只要借助时间元组【即时间序列】,即可实现这两者之间的转换。先让时间格式化为字符串,然后利用time.strptime(string_time,format)把字符串转换为时间元组,这时就是time模块的时间了,接着再利用time模块的其他函数,比如time.mktime(localtime)转换为时间戳等等。

now = datetime.datetime.now()
str_t = now.strftime('%Y-%m-%d %H:%M:%S')
print('字符串时间为:', str_t)

# 以字符串时间为中间形式,借助time.strptime()转为time模块的时间元组
o_dt = time.strptime(str_t, '%Y-%m-%d %H:%M:%S') 
print('字符串时间转为时间元组:', o_dt)

time_chuo = time.mktime(o_dt)  # 借助time.mktime()把时间元组转为时间戳
print('转为时间戳:', time_chuo)

输出:
格式化后的字符串: 2025-01-02 14:46:17
转为时间: time.struct_time(tm_year=2025, tm_mon=1, tm_mday=2, tm_hour=14, tm_min=46, tm_sec=17, tm_wday=3, tm_yday=2, tm_isdst=-1)
转为时间戳: 1735800377.0
now_tuple = now.timetuple()
now_chuo = time.mktime(now_tuple)

print('从时间序列转换为时间戳:', now_chuo)

输出:

从时间序列转换为时间戳: 1735800977.0

上图中,先利用timetuple()函数取得时间序列,然后借助time.mktime()函数转换为时间戳,也可以实现datetime和time之间的相互转换。

8. datetime.now()类

# 获取当前的年、月份
print(datetime.datetime.now().date())

输出:
2025-01-02
# 获取每个时间的序列
print(datetime.datetime.now().timetuple())

# 获取月份
print(datetime.datetime.now().timetuple().tm_mon)

# 时间类型转为字符串类型
date_str = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
print(date_str)

# 在当前日期里加上2天,打印出来,注意模块的使用,优先级的混淆
print(datetime.datetime.now().date() + datetime.timedelta(days=2))

# 在现在的时间里面向后推迟2小时
print(datetime.datetime.now() + datetime.timedelta(hours=2))

输出:

time.struct_time(tm_year=2025, tm_mon=1, tm_mday=2, tm_hour=15, tm_min=42, tm_sec=59, tm_wday=3, tm_yday=2, tm_isdst=-1)
1
2025-01-02 15:42:59
2025-01-04
2025-01-02 17:42:59.058140

9. datetime.timedelta:timedelta对象表示两个日期或时间的时间差。

# 创建了两个timedelta对象t1和t2,打印相差的时间
t1 = datetime.timedelta(weeks=2, days=5, hours=1, seconds=33)
t2 = datetime.timedelta(days=4, hours=11, minutes=4, seconds=54)
t3 = t1 - t2
print(t3)
>> 14 days, 13:55:39
t1 = datetime.timedelta(seconds = 33)
t2 = datetime.timedelta(seconds = 54)
t3 = t1 - t2
print("t3 =", t3)
>> t3 = -1 day, 23:59:39
# 使用total_seconds()方法获得timedelta对象中的总秒数
t = datetime.timedelta(days=5, hours=1, seconds=33, microseconds=233423)
print("total seconds =", t.total_seconds())
>> total seconds = 435633.233423
# 求出上一个月的最后一天日期,就用这个月的第一天减1天,这个里面的参数可以改动,默认为月份初始化天
f=datetime.date(day=1, month=datetime.date.today().month, year=datetime.date.today().year) - datetime.timedelta(days=1)
print(f)
>> 2022-10-31

你可能感兴趣的:(Python,python,开发语言)