Python datetime

Python 有一个名为 datetime模块,用于处理日期和时间。

它提供了各种,用于表示和操作日期和时间,以及以多种格式格式化和解析日期和时间。


示例 1:获取当前日期和时间

import datetime

# get the current date and time
now = datetime.datetime.now()

print(now)

输出

2022-12-27 08:26:49.219717

在这里,我们使用 import datetime 语句导入了 datetime 模块。

datetime 模块中定义的类之一是 datetime 类。

然后我们使用 now() 方法创建了一个包含当前本地日期和时间的 datetime 对象。


示例 2:获取当前日期

import datetime

# get current date
current_date = datetime.date.today()

print(current_date)

输出

2022-12-27

在上面的示例中,我们使用了 date 类中定义的 today() 方法来获取一个包含当前本地日期的 datetime 对象。


datetime 模块的属性

我们可以使用 dir() 函数来获取一个包含模块所有属性的列表

import datetime

print(dir(datetime))

输出

['MAXYEAR', 'MINYEAR', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_divide_and_round', 'date', 'datetime', 'datetime_CAPI', 'time', 'timedelta', 'timezone', 'tzinfo']

datetime 模块的所有属性中,最常用的类是:

  • datetime.datetime - 表示一个具体的时间点,包括日期和时间。
  • datetime.date - 表示一个日期(年、月、日),不包含时间。
  • datetime.time - 表示一个时间(时、分、秒、微秒),不包含日期。
  • datetime.timedelta - 表示一个时间差,可用于对 datetime 对象进行算术运算。

Python datetime.date 类

在 Python 中,我们可以从 date 类实例化 date 对象。一个 date 对象表示一个日期(年、月、日)。

示例 3:用 date 对象表示日期

import datetime

d = datetime.date(2022, 12, 25)
print(d)

输出

2022-12-25

在这里,上面示例中的 date()date 类的构造函数。该构造函数接受三个参数:yearmonthday

仅导入 date 类

我们可以只从 datetime 模块中导入 date 类。例如,

from datetime import date

d = date(2022, 12, 25)
print(d)

输出

2022-12-25

在这里,from datetime import date 只从 datetime 模块中导入了 date 类。


示例 4:使用 today() 获取当前日期

我们可以使用名为 today() 的类方法创建一个包含当前日期的 date 对象。例如,

from datetime import date

# today() to get current date
todays_date = date.today()

print("Today's date =", todays_date)

输出

Today's date = 2022-12-27

示例 5:从时间戳获取日期

我们也可以从时间戳创建 date 对象。

UNIX 时间戳是特定日期与 UTC 时间 1970年1月1日 之间的秒数。您可以使用 fromtimestamp() 方法将时间戳转换为日期。

from datetime import date

timestamp = date.fromtimestamp(1326244364)
print("Date =", timestamp)

输出

Date = 2012-01-11

我们可以很容易地从 date 对象中获取年、月、日、星期几等信息。例如,

from datetime import date

# date object of today's date
today = date.today() 

print("Current year:", today.year)
print("Current month:", today.month)
print("Current day:", today.day)

输出

Current year: 2022
Current month: 12
Current day: 27

Python datetime.time 类

time 类实例化的 time 对象表示本地时间。

示例 7:用 time 对象表示时间

from datetime import time

# time(hour = 0, minute = 0, second = 0)
a = time()
print(a)

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

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

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

输出

a = 00:00:00
b = 11:34:56
c = 11:34:56
d = 11:34:56.234566

示例 8:打印时、分、秒和微秒

一旦我们创建了 time 对象,我们就可以轻松地打印它的属性,如 hourminute 等。例如,

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

在这里,请注意我们没有传递 microsecond 参数。因此,打印了它的默认值 0


datetime.datetime 类

datetime 模块有一个名为 datetime 的类,它可以包含来自 datetime 对象的信息。

示例 9:Python datetime 对象

from datetime import datetime

# datetime(year, month, day)
a = datetime(2022, 12, 28)
print(a)

# datetime(year, month, day, hour, minute, second, microsecond)
b = datetime(2022, 12, 28, 23, 55, 59, 342380)
print(b)

输出

2022-12-28 00:00:00
2022-12-28 23:55:59.342380

datetime() 构造函数中的前三个参数 yearmonthday 是必需的。


示例 10:打印年、月、时、分和时间戳

from datetime import datetime

a = datetime(2022, 12, 28, 23, 55, 59, 342380)

print("Year =", a.year)
print("Month =", a.month)
print("Hour =", a.hour)
print("Minute =", a.minute)
print("Timestamp =", a.timestamp())

输出

year = 202
month = 12
day = 28
hour = 23
minute = 55
timestamp = 1511913359.34238

Python datetime.timedelta 类

timedelta 对象表示两个日期或时间之间的差值。例如,

from datetime import datetime, date

# using date()
t1 = date(year = 2018, month = 7, day = 12)
t2 = date(year = 2017, month = 12, day = 23)

t3 = t1 - t2

print("t3 =", t3)

# using datetime()
t4 = datetime(year = 2018, month = 7, day = 12, hour = 7, minute = 9, second = 33)
t5 = datetime(year = 2019, month = 6, day = 10, hour = 5, minute = 55, second = 13)
t6 = t4 - t5
print("t6 =", t6)

print("Type of t3 =", type(t3)) 
print("Type of t6 =", type(t6))  

输出

t3 = 201 days, 0:00:00
t6 = -333 days, 1:14:20
Type of t3 = <class 'datetime.timedelta'>
Type of t6 = <class 'datetime.timedelta'>

注意,t3t6 的类型都是 <class 'datetime.timedelta'>


示例 12:两个 timedelta 对象之间的差值

from datetime import timedelta

t1 = timedelta(weeks = 2, days = 5, hours = 1, seconds = 33)
t2 = timedelta(days = 4, hours = 11, minutes = 4, seconds = 54)

t3 = t1 - t2

print("t3 =", t3)

输出

t3 = 14 days, 13:55:39

在这里,我们创建了两个 timedelta 对象 t1t2,它们的差值被打印在屏幕上。


示例 14:以秒为单位的时间差

我们可以使用 total_seconds() 方法获取一个 timedelta 对象中的总秒数。

from datetime import timedelta

t = timedelta(days = 5, hours = 1, seconds = 33, microseconds = 233423)
print("Total seconds =", t.total_seconds())

输出

Total seconds = 435633.233423

Python 格式化 datetime

日期和时间的表示方式在不同的地方、组织等可能有所不同。在美国,使用 mm/dd/yyyy 更常见,而在英国,dd/mm/yyyy 更常见。

Python 有 strftime()strptime() 方法来处理这个问题。


Python strftime() 方法

strftime() 方法在 datedatetimetime 类中定义。该方法从给定的 datedatetimetime 对象创建一个格式化的字符串

让我们看一个例子。

from datetime import datetime

# current date and time
now = datetime.now()

t = now.strftime("%H:%M:%S")
print("Time:", t)

s1 = now.strftime("%m/%d/%Y, %H:%M:%S")
# mm/dd/YY H:M:S format
print("s1:", s1)

s2 = now.strftime("%d/%m/%Y, %H:%M:%S")
# dd/mm/YY H:M:S format
print("s2:", s2)

输出

time: 04:34:52
s1: 12/26/2018, 04:34:52
s2: 26/12/2018, 04:34:52

在这里,%Y%m%d%H 等是格式代码。strftime() 方法接受一个或多个格式代码,并根据它返回一个格式化的字符串。

在上面的例子中,ts1s2 都是字符串。

  • %Y - 年 [0001,..., 2018, 2019,..., 9999]
  • %m - 月 [01, 02, ..., 11, 12]
  • %d - 日 [01, 02, ..., 30, 31]
  • %H - 小时 [00, 01, ..., 22, 23]
  • %M - 分钟 [00, 01, ..., 58, 59]
  • %S - 秒 [00, 01, ..., 58, 59]

要了解更多关于 strftime() 和格式代码的信息,请访问:Python strftime()


Python strptime() 方法

strptime() 方法从给定的字符串(表示日期和时间)创建一个 datetime 对象。例如,

from datetime import datetime

date_string = "25 December, 2022"
print("date_string =", date_string)

# use strptime() to create date object
date_object = datetime.strptime(date_string, "%d %B, %Y")

print("date_object =", date_object)

输出

date_string = 25 december, 2022
date_object = 2018-06-21 00:00:00

strptime() 方法接受两个参数:

  • 一个表示日期和时间的字符串
  • 与第一个参数等效的格式代码

顺便说一下,%d%B%Y 格式代码分别用于(全名)和

要了解更多关于 strptime() 和格式代码的信息,请访问:Python strptime()


在 Python 中处理时区

假设我们正在开发一个项目,需要根据时区显示日期和时间。

我们建议使用第三方pytZ 模块,而不是尝试自己处理时区。

from datetime import datetime
import pytz

local = datetime.now()
print("Local:", local.strftime("%m/%d/%Y, %H:%M:%S"))


tz_NY = pytz.timezone('America/New_York') 
datetime_NY = datetime.now(tz_NY)
print("NY:", datetime_NY.strftime("%m/%d/%Y, %H:%M:%S"))

tz_London = pytz.timezone('Europe/London')
datetime_London = datetime.now(tz_London)
print("London:", datetime_London.strftime("%m/%d/%Y, %H:%M:%S"))

输出

Local: 12/27/2022, 09:40:19
NY: 12/27/2022, 04:40:19
London: 12/27/2022, 09:40:19

在这里,datetime_NYdatetime_Londondatetime 对象,包含它们各自时区的当前日期和时间。


另请阅读

在我们结束之前,让我们来测试一下您对 Python datetime 的知识!您能解决下面的挑战吗?

挑战

编写一个函数,将日期从 'dd-mm-yyyy' 格式转换为 'mm-dd-yyyy' 格式。

  • 以一个日期字符串作为输入,并以 'mm-dd-yyyy' 格式返回它。
  • 例如,如果输入是 '15-02-2020',预期的输出是 '02-15-2020'

视频:Python datetime - 处理日期和时间

你觉得这篇文章有帮助吗?

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战