datetime相较于原生的time模块功能要丰富得多。主要二级对象为:
类名 | 说明 |
date | 日期对象,年月日 |
time | 时间对象,时分秒 |
datetime | 日期时间对象,完整的时间,年月日时分秒 |
timedelta | 时间差 |
(1)通过指定年月日
a = datetime.date(2022, 11, 1)
print(a)
# 输出:
2022-11-01
(2)直接获取当天
print(datetime.date.today())
# 输出:
2022-11-01
(3)通过已有date对象创建
这个方法还是比较有用的,在数据处理时经常需要对时间进行替换操作。比如替换年份,月和日不变。
a = datetime.date(2022, 11, 1)
b = a.replace(2018)
print(b)
# 输出:
2018-11-01
(4)通过时间戳
a = datetime.date.fromtimestamp(time.time())
print(a)
# 输出:
2022-11-01
(1)获取对象的年、月、日
这里实际上提供了一种输出指定格式时间字符串的方法。
a = datetime.date(2022, 11, 1)
print('{}/{}/{}'.format(a.year, a.month, a.day))
# 输出:
2022/11/1
(2)比较日期大小
a = datetime.date(2022, 11, 1)
b = a.replace(2018)
print(a > b)
# 输出:
True
(3)两个日期对象相减获得时间差
返回的实际上就是一个datetime.timedelta对象,该对象将在最后一部分总结。
a = datetime.date(2022, 11, 1)
b = a.replace(2018)
delta = a - b
print(delta.days)
# 输出:
1461
(4)返回struct_time
这个在time模块有总结,链接Python 时间相关(time模块)_Jiangugu的博客-CSDN博客
a = datetime.date(2022, 11, 1)
print(a.timetuple())
# 输出:
time.struct_time(tm_year=2022, tm_mon=11, tm_mday=1, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=1, tm_yday=305, tm_isdst=-1)
和date对象一样,datetime同样支持指定年月日时分秒、通过时间戳和替换已有datetime参数来创建。
a = datetime.datetime(2022, 11, 1, 17, 30, 00)
b = datetime.datetime.fromtimestamp(time.time())
c = a.replace(2018)
d = datetime.datetime.now()
print(a, b, c, d)
# 输出:
2022-11-01 17:30:00 2022-11-01 18:32:50.243000 2018-11-01 17:30:00 2022-11-01 18:32:50.243000
比较特殊的方法是将date和time对象结合进而生成datetime对象
t = datetime.time(17, 30, 0)
dt = datetime.date(2022, 11, 1)
dtt = datetime.datetime.combine(dt, t)
print(dtt)
# 输出:
2022-11-01 17:30:00
(1)返回日期或时间
datetime实际上是融合了date和time(因此,time类不再单独总结),因而datetime可以将两者拆开返回。
a = datetime.datetime(2022, 11, 1, 17, 30, 00)
print("日期部分:{},时间部分:{}".format(a.date(), a.time()))
# 输出:
日期部分:2022-11-01,时间部分:17:30:00
(2)返回世界统一协调时间
d = datetime.datetime.now()
print(d.utcnow())
# 输出:
2022-11-01 10:48:51.028600
a = datetime.datetime(2022, 11, 1, 17, 30, 00)
b = datetime.datetime.now()
time_delta = b - a
print('现在距离下班已有{}分钟'.format(time_delta.seconds/60))
# 输出:
现在距离下班已有89.21666666666667分钟
time_delta = datetime.timedelta(days=0, seconds=5400)
print('现在距离下班已有{}分钟'.format(time_delta.seconds/60))
# 输出:
现在距离下班已有90.0分钟
b = datetime.date(2022, 3, 15)
time_delta = datetime.timedelta(days=30)
a = b - time_delta
print('2022年3月15的前30天是:', a)
# 输出:
2022年3月15的前30天是: 2022-02-13
a = datetime.datetime.strptime('2022/11/1', '%Y/%m/%d')
print(a)
# 输出:
2022-11-01 00:00:00
实际上,上面已经提到一种灵活的方式。因为我们既然已经获取了年月日时分秒的具体数值,怎么构造字符串还不是随心所欲。这里提供一个datetime自带的方法。
b = datetime.datetime.now()
a = datetime.datetime.strftime(b, '%Y/%m/%d')
print(a)
# 输出:
2022/11/01