Python中的常用模块-datetime模块

datetime模块提供用于操作日期和时间的各种类。

以下示例,都假设我们已经事先全量导入了datetime模块。

>>> from datetime import *

示例:获得当前时间:

>>> dt = datetime.now()
>>> print(dt)
2021-11-05 16:34:47.007226

datetime模块中提供了datetime类,datetime类中定义了一下now()方法来返回当前本地时间。

datetime模块包含那些内容

datetime模块中,包含以下几个常用的类:

  • date类,您可以从date类实例化date对象。 date对象表示日期(年、月和日)。
  • time类,从time类实例化的时间对象表示本地时间。
  • datetime类,包含datetime对象的信息。
  • timedelta类,对象表示两个datetime之间的差异。

我们先从简单的date类和time类讲起:

date类

使用date.today()获取当前日期。

>>> date.today()
datetime.date(2021, 11, 6)
`

使用date类的构造函数date(year, month, day)初始化date类型变量。

>>> d = date(2022, 1, 1)
>>> print(d)
2022-1-1

您也可以从一个字符串初始化date对象,使用date.fromisoformat('YYYY-MM-DD')

>>> date.fromisoformat('2022-12-03')
datetime.date(2022, 12, 3)

您还可以从一个timestamp值初始化date对象,使用date.fromtimestamp(ts)

>>> date.fromtimestamp(1636209205)
datetime.date(2021, 11, 6)

timestamp是特定日期与UTC时间1970年1月1日之间的秒数。

使用date.isoformat(day)可以将date对象转化为字符串。

>>> d = date.today()
>>> d.isoformat()
'2021-11-07'

我们可以轻松地从日期对象中获取年、月、日、星期几等。 就是这样:

>>> d.day
6
>>> d.year
2021
>>> d.month
11
>>> d.weekday()     #返回一个整数代表星期几,星期一为0,星期天为6。
5
>>> d.isoweekday()  #返回一个整数代表星期几,星期一为1,星期天为7。
6

time类

使用以下方法实例化time对象

from datetime import time

# time(hour, minute and second)
t1 = time(11, 34, 56)
print("t1 =", t1)

# time(hour, minute and second)
t2 = time(hour = 11, minute = 34, second = 56)
print("t2 =", t2)

# time(hour, minute, second, microsecond)
t3 = time(11, 34, 56, 234566)
print("t3 =", t3)

执行上述代码:

t1 = 11:34:56
t2 = 11:34:56
t3 = 11:34:56.234566

使用time.isoformat(t)可以将time对象转化为字符串。

>>> t = time(9,28,39,981212)
>>> time.isoformat(t)
'09:28:39.981212'
>>> t.isoformat()
'09:28:39.981212'

获取时、分钟、秒和微秒

from datetime import time

a = time(11, 34, 56)

print("hour =", a.hour)
print("minute =", a.minute)
print("second =", a.second)
print("microsecond =", a.microsecond)

执行上述代码:

hour = 11
minute = 34
second = 56
microsecond = 0

datetime类

在Python中DateTime对象表示日期和时间。

通过构造函数datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0)初始化DateTime对象:

>>> a = datetime(2021, 11, 7)
>>> print(a)
>>> a = datetime(2021, 11, 7, 9, 53, 28, 342380)
>>> print(a)

获得year, month, hour, minutetimestamp

>>> a = datetime(2021, 11, 7, 9, 53, 28, 342380)
>>> print("year =", a.year)
year = 2021
>>> print("month =", a.month)
month = 11
>>> print("hour =", a.hour)
hour = 9
>>> print("minute =", a.minute)
minute = 53
>>> print("timestamp =", a.timestamp())
timestamp = 1636250008.34238

使用datetime.now()获得当前时间:

>>> today = datetime.now()
>>> print("Current date and time is", today)
Current date and time is 2021-11-07 10:05:07.695253

使用将DateTime类型转化为字符串

>>> now = datetime.now()
>>> now.isoformat()
'2021-11-07T10:08:37.081362'

timedelta类

Pythontimedelta类用于计算日期差异,也可用于Python中的日期操作。 这是执行日期操作的最简单方法之一。

>>> now = datetime.now()
>>> print("当前时间:",now)
当前时间: 2021-11-07 10:18:11.083324
>>> dateAfter2Days = now + timedelta(days=2)
>>> print("两天之后是", dateAfter2Days)
两天之后是 2021-11-09 10:18:11.083324

这里使用了timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)的构造函数来初始化timedelta对象。

两个datetime类型的对象相减后,结果是一个timedelta类型的对象。

>>> td = dateAfter2Days - now
>>> print(td)
2 days, 0:00:00

格式化datetime

strftime()方法将给定的datetimedatetime对象转换为给定格式的字符串形式。

>>> now = datetime.now()
>>> now.strftime("%Y-%m-%d %H:%M:%S")
'2021-11-07 10:56:26'
>>> print(now)
2021-11-07 10:56:26.176584

以下是1989C标准要求的所有格式代码的列表,这些代码适用于使用标准C实现的所有平台。

命令 意思 示例
%y 两位数的年份表示(00-99) 00, 01, …, 20, 21, 99
%Y 四位数的年份表示(000-9999) 0001, 0002, …, 2020, 2021, …, 9998, 9999
%m 月份(01-12) 01, 02, …, 12
%d 月内中的一天(0-31) 01, 02, …, 31
%H 24小时制小时数(0-23) 00, 01, …, 23
%I 12小时制小时数(01-12) 01, 02, …, 12
%M 分钟数(00=59) 00, 01, …, 59
%S 秒(00-59) 00, 01, …, 59
%a 本地简化星期名称 Sun, Mon, …, Sat
%A 本地完整星期名称 Sunday, Monday, …, Saturday
%b 本地简化的月份名称 Jan, Feb, …, Dec
%B 本地完整的月份名称 January, February, …, December
%c 本地相应的日期表示和时间表示 Sun Nov 7 10:56:26 2021
%j 年内的一天(001-366) 001, 002, …, 366
%p 本地A.M.或P.M.的等价符 AM, PM
%U 一年中的星期数(00-53)星期天为星期的开始 00, 01, …, 53
%w 星期(0-6),星期天为星期的开始 0, 1, …, 6
%W 一年中的星期数(00-53)星期一为星期的开始 00, 01, …, 53
%x 本地相应的日期表示 11/07/21
%X 本地相应的时间表示 10:56:26
%Z 当前时区的名称
%% %号本身

strptime()从给定的字符串创建一个datetime对象。

>>> d = datetime.strptime('2020-01-01 12:30:00', '%Y-%m-%d %H:%M:%S')
>>> print(d)
2020-01-01 12:30:00