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