HOWTO · Python

在 Python 中从日期时间获取小时和分钟

本教程演示了如何使用 Python 中的 datetime 模块获得小时和分钟的时间。

本页内容

在 Python 中获取小时和分钟,可以先将日期时间文本解析为 datetime 对象,再读取其 .hour 和 .minute 属性。获取当前时间时,可以使用 datetime.now(),再通过 strftime() 格式化,或提取其 .time() 值。若需要统一的 24 小时制 HH:MM 字符串,可以使用 %H:%M,或将数字格式化为两位数。

从指定的 datetime 获取小时和分钟

已知日期和时间格式时,可以使用 datetime.strptime() 解析字符串。格式字符串必须与输入相符:%d/%m/%y %H:%M 表示日、月、两位数年份,接着是 24 小时制时间。在这个例子中,03/02/21 表示 2021 年 2 月 3 日,解析后的对象中小时为 16,分钟为 30。

运行以下示例:

本节中的代码以及显示的标签或输出仍为英文。

from datetime import datetime

specific_time = datetime.strptime("03/02/21 16:30", "%d/%m/%y %H:%M")
hour = specific_time.hour
minute = specific_time.minute
formatted_time = f"{hour:02d}:{minute:02d}"
print(formatted_time)

.hour 和 .minute 属性的值是整数,可以直接用于计算或比较。:02d 格式说明符会让每个整数至少显示两位,不足时在前面补零,因此像 8:05 这样的时间也能保持 HH:MM 格式。两位数年份指令 %y 会按照 Python 的日期解析规则解释年份;若要避免歧义,建议使用四位数年份 %Y,例如 %d/%m/%Y %H:%M。

输入的每个部分都要使用相符的格式指令:%m/%d/%Y 表示月/日/四位数年份,%d/%m/%Y 表示日/月/四位数年份。如果解析失败,先核对输入字符串中的分隔符和各部分顺序是否与格式指令相符。datetime 还会保留日期和秒;读取 .hour 和 .minute 不会改变原对象。

该链接目前指向英文 API 页面;提供的目标清单中没有简体中文页面。

使用 strftime() 获取当前时间的小时和分钟

调用 datetime.now(),可以根据系统本地时钟取得一个 datetime。然后使用 strftime() 将小时和分钟转换为显示字符串。%H 会生成范围为 00 到 23 的 24 小时制小时数,并在需要时补零;%M 会生成范围为 00 到 59 的分钟数,并在需要时补零。

本节中的代码以及显示的标签或输出仍为英文。

from datetime import datetime

current_time = datetime.now()
formatted_time = current_time.strftime("%H:%M")
print(formatted_time)

打印出的值会随时钟变化,因此不会是固定字符串。如果后续代码还需要日期或其他组成部分,请保留 current_time。若要显示 12 小时制,%I 会生成 01 到 12 之间的小时数;加上 %p 可显示当前区域设置中的 AM 或 PM 标记,例如 "%I:%M %p"。

使用 .time() 获取当前时间的小时和分钟

如果需要将时间部分作为对象使用,而不是直接得到格式化字符串,可以使用 .time()。它会返回一个 time 对象,其 .hour 和 .minute 属性可以像 datetime 对象中的对应属性一样读取和格式化。

本节中的代码以及显示的标签或输出仍为英文。

from datetime import datetime

current_time = datetime.now().time()
hour = current_time.hour
minute = current_time.minute
print(f"{hour:02d}:{minute:02d}")

后续逻辑需要数值时,这种方式很方便;如果希望立即得到文本,则使用 strftime()。这两种获取当前时间的示例都依赖系统时钟,运行过程中可能跨入下一分钟。datetime.now() 默认使用本地时间。如果应用需要特定时区,应先使用相应时区创建一个带时区信息的 datetime,再格式化或提取其中的时间;否则,本地时钟的值可能不代表预期地点的时间。