Python时间处理:datetime模块的基本用法
在Python中,有一个专门用来处理时间日期的datetime模块,可以方便地对时间进行计算、转化、比较等操作。下面介绍datetime模块的基本用法。
datetime模块中最重要、最基本的类就是datetime类,它包含年、月、日、时、分、秒、微秒等各个时间单位。要使用datetime类,需要先导入模块并创建一个datetime对象:
import datetime now = datetime.datetime.now() print(now)
输出:
2022-01-01 00:00:00.000000
这里,我们使用datetime.datetime.now()获取当前时间,然后将其保存到now变量中,并打印输出。
datetime对象有一些常用的属性和方法,如下表所示:
| 属性/方法 | 描述 |
| ----------------- | ------------------------------ |
| year | 年份(4位数字) |
| month | 月份(1~12) |
| day | 日(1~31) |
| hour | 小时(0~23) |
| minute | 分钟(0~59) |
| second | 秒(0~59) |
| microsecond | 微秒(0~999999) |
| weekday() | 返回星期几(0~6,0表示星期一) |
| isocalendar() | 返回ISO格式的年、周数、星期几 |
| strftime(format) | 将datetime对象格式化为字符串 |
| strptime(string, format) | 将字符串解析为datetime对象 |
下面是一些示例代码,演示如何使用datetime对象的属性和方法。
# 获取年月日
print(now.year, now.month, now.day)
# 获取小时分钟秒
print(now.hour, now.minute, now.second)
# 获取星期几(0~6,0表示星期一)
print(now.weekday())
# 获取ISO格式的年、周数、星期几
print(now.isocalendar())
# 将datetime对象格式化为字符串
print(now.strftime('%Y-%m-%d %H:%M:%S'))
# 将字符串解析为datetime对象
str_time = '2022-01-01 10:00:00'
dt = datetime.datetime.strptime(str_time, '%Y-%m-%d %H:%M:%S')
print(dt)
输出:
2022 1 1 0 0 0 5 (2021, 52, 6) 2022-01-01 00:00:00 2022-01-01 10:00:00
datetime类的初始化方法有很多,可以根据需要选择。下面是一些常见的初始化方式。
# 指定年月日
dt1 = datetime.datetime(year=2022, month=1, day=1)
# 从字符串解析时间
dt2 = datetime.datetime.strptime('2022-01-01', '%Y-%m-%d')
# 从时间戳转换
dt3 = datetime.datetime.fromtimestamp(1641004800)
# 当前时间
dt4 = datetime.datetime.now()
# 当前本地时间
dt5 = datetime.datetime.now(datetime.timezone(datetime.timedelta(hours=8)))
# 当前UTC时间
dt6 = datetime.datetime.utcnow()
除了datetime类,datetime模块中还有一些其他的类和函数,如下表所示:
| 类/函数 | 描述 |
| ----------------- | -------------------------------------------------- |
| date | 表示日期(年月日) |
| time | 表示时间(时分秒微秒) |
| timedelta | 表示时间差,用于计算时间间隔 |
| tzinfo | 时区信息,用于表示不同时区的时间 |
| timezone | 时区差,用于表示时区偏移量(如东八区为+8小时) |
| datetime.combine() | 将日期和时间合并为datetime对象 |
| datetime.date() | 返回datetime对象的日期部分(即year、month、day) |
| datetime.time() | 返回datetime对象的时间部分(即hour、minute、second)|
| datetime.utcnow() | 返回当前时间的UTC时间,不带时区信息 |
| datetime.now() | 返回当前时间(带时区信息) |
| datetime.today() | 返回当前本地日期和时间(不带时区信息) |
下面是一些示例代码,演示如何使用datetime模块中的其他类和函数。
import datetime
# 创建date对象
d1 = datetime.date(2022, 1, 1)
print(d1)
# 从字符串解析日期
d2 = datetime.datetime.strptime('2022-01-01', '%Y-%m-%d').date()
print(d2)
# 创建time对象
t1 = datetime.time(0, 0, 0)
print(t1)
# 创建timedelta对象
delta1 = datetime.timedelta(weeks=2, days=3, hours=4, minutes=5, seconds=6, microseconds=7)
delta2 = datetime.timedelta(days=365)
print(delta1, delta2)
# 计算时间差
now = datetime.datetime.now()
dt = datetime.datetime.strptime('2021-12-31 23:59:59', '%Y-%m-%d %H:%M:%S')
delta = now - dt
print(delta)
# 创建时区对象
tz1 = datetime.timezone(datetime.timedelta(hours=8))
tz2 = datetime.timezone(datetime.timedelta(hours=-5, minutes=-30))
# 将datetime对象与时区信息关联(生成timezone-aware datetime)
dt1 = datetime.datetime(2022, 1, 1, 0, 0, 0, tz1)
dt2 = datetime.datetime(2022, 1, 1, 0, 0, 0, tz2)
# 将日期和时间合并为datetime对象
d1 = datetime.date(2022, 1, 1)
t1 = datetime.time(0, 0, 0)
dt1 = datetime.datetime.combine(d1, t1)
print(dt1)
# 返回datetime对象的日期部分和时间部分
d = dt1.date()
t = dt1.time()
print(d, t)
输出:
2022-01-01 2022-01-01 00:00:00 15 days, 4:05:06.000007 365 days, 0:00:00 0:12:19.506475 2022-01-01 00:00:00 2022-01-01 00:00:00+08:00 2021-12-31 18:30:00-05:30 2022-01-01 00:00:00 2022-01-01 00:00:00 00:00:00
以上就是datetime模块的基本用法,适用于大多数时间处理任务。如果需要高精度时间计算,可以使用第三方库,如arrow、pendulum等。
