🇯🇵 日本語 | 🇺🇸 English | 🇪🇸 Español | 🇵🇹 Português | 🇹🇭 ไทย | 🇨🇳 中文

使用Python的datetime模块轻松处理日期和时间!

要在电脑上通过命令提示符或 PowerShell 运行 Python,需要先下载并安装 Python。
如果你还没有安装,请参考Python安装与开发环境配置一文来完成安装。

在开发网站或应用程序时,我们经常会遇到需要处理日期和时间的场景,比如“显示当前时间”、“记录文章的发布日期和时间”、“计算促销活动结束的剩余时间”等。在这种时候,Python内置的datetime模块就能大显身手。

本文将通过简单易懂的示例代码,从datetime模块的基础用法到一些应用技巧进行解说,即使是初学者也能通过复制粘贴来体验“代码跑起来”的感觉。那么,就让我们一起进入日期和时间的世界吧!🚀


datetime模块的基础知识

首先,我们从使用datetime模块的准备工作以及最基本的功能——“获取当前日期和时间”开始吧。

导入模块

要使用datetime模块,首先需要在代码的开头将其导入(加载)。如果没有这一步,Python就会不明白“datetime是什么?”。

import datetime

获取当前日期和时间

获取此时此刻的日期和时间非常简单,只需调用 `datetime.datetime.now()` 即可。

import datetime

# 获取当前日期和时间
now = datetime.datetime.now()
print(now)

# 示例输出: 2025-07-11 07:42:15.123456

如果不需要时间,只想获取今天的日期,可以使用 `datetime.date.today()`。

import datetime

# 只获取今天的日期
today = datetime.date.today()
print(today)

# 示例输出: 2025-07-11

访问日期和时间的各个元素

从获取的 `datetime` 对象中,可以提取出年、月、日、时、分、秒等独立信息。这在希望显示“今年是2025年”等信息时非常方便。

import datetime

now = datetime.datetime.now()

print(f"年: {now.year}")
print(f"月: {now.month}")
print(f"日: {now.day}")
print(f"时: {now.hour}")
print(f"分: {now.minute}")
print(f"秒: {now.second}")
print(f"微秒: {now.microsecond}")

自己创建指定的日期和时间

当然,不仅可以获取当前时间,也可以创建表示过去或未来特定日期的对象。这在指定生日或服务启动日期等情况下会用到。

import datetime

# 指定2026年1月1日 上午9点30分0秒
specific_datetime = datetime.datetime(2026, 1, 1, 9, 30, 0)
print(specific_datetime)

# 输出: 2026-01-01 09:30:00

格式化日期和时间使其更易读

像 `2025-07-11 07:42:15` 这样的格式也不错,但在网站上,我们可能希望显示得更直观一些,比如“2025年07月11日 07时42分”。这时候,`strftime()` 方法就派上用场了。

使用strftime()转换为喜欢的格式字符串

`strftime()` 是 "string format time" 的缩写,它能将 `datetime` 对象转换为指定格式的字符串。为了指定格式,我们会使用像 `%Y`、`%m` 这样的“格式化代码”。

import datetime

now = datetime.datetime.now()

# 指定格式并转换为字符串
formatted_string = now.strftime("%Y年%m月%d日 %H时%M分%S秒")
print(formatted_string)

# 示例输出: 2025年07月11日 07时42分15秒

下面介绍一些常用的格式化代码。


使用strptime()将字符串转换为日期时间

反过来,有时我们也希望将“2025/07/11”这样的字符串数据转换为程序可以处理的 `datetime` 对象。这时就可以使用 `strptime()` 方法了。它是 "string parse time" 的缩写,可以解析字符串。

重要: 使用 `strptime()` 时,原始字符串的格式必须与指定的格式化代码完全匹配。如果不匹配,将会导致错误,需要特别注意。

import datetime

date_string = "2025年7月11日"

# 指定字符串的格式,将其转换为datetime对象
# 在此例中,由于只有日期,所以会变成date对象
date_obj = datetime.datetime.strptime(date_string, "%Y年%m月%d日").date()

print(date_obj)
print(type(date_obj))

# 输出:
# 2025-07-11
# <class 'datetime.date'>

应用篇:来计算日期和时间吧

datetime模块的真正魅力在于能轻松进行日期和时间的计算。我们可以使用 `timedelta` 对象直观地进行“一周后的日期是?”、“距离促销结束还有几天?”等计算。

使用timedelta表示时间差

`timedelta` 是一个用于表示两个日期时间之间的时间段(时间差)的对象。通过指定天数、秒数、微秒数等来创建。

import datetime

now = datetime.datetime.now()
print(f"当前时间: {now.strftime('%Y-%m-%d %H:%M')}")

# 计算一周后的时间
one_week_later = now + datetime.timedelta(weeks=1)
print(f"一周后: {one_week_later.strftime('%Y-%m-%d %H:%M')}")

# 计算三天前的时间
three_days_ago = now - datetime.timedelta(days=3)
print(f"三天前:  {three_days_ago.strftime('%Y-%m-%d %H:%M')}")

# 计算10小时30分钟后的时间
ten_hours_later = now + datetime.timedelta(hours=10, minutes=30)
print(f"10小时30分钟后: {ten_hours_later.strftime('%Y-%m-%d %H:%M')}")

计算两个日期之差

两个 `datetime` 对象相减,结果会是一个 `timedelta` 对象。利用这一点,可以计算到特定日期还剩多少天等。

import datetime

# 今天的日期
today = datetime.date.today()

# 目标日期(例如,2026年的元旦)
new_year_2026 = datetime.date(2026, 1, 1)

# 计算两个日期之差
delta = new_year_2026 - today

print(f"距离2026年元旦还有 {delta.days} 天。")

注意事项:时区的陷阱

到目前为止,我们例子中处理的日期时间其实都是不带时区信息的“**朴素**(naive)”对象。对于个人使用的简单脚本来说可能没问题,但如果要开发一个供全球用户访问的Web服务,时区就是一个无法回避的问题。

例如,日本的“7月11日上午9点”和美国的“7月11日上午9点”是完全不同的时刻。为了正确处理这种差异,我们需要使用带有TimeZone信息的“**感知**(aware)”对象。

在Python 3.9及以上版本中,可以使用标准库 `zoneinfo` 轻松处理时区问题。

import datetime
from zoneinfo import ZoneInfo

# 指定时区获取当前时间
tokyo_tz = ZoneInfo("Asia/Tokyo")
now_tokyo = datetime.datetime.now(tokyo_tz)
print(f"东京当前时间: {now_tokyo}")

newyork_tz = ZoneInfo("America/New_York")
now_newyork = datetime.datetime.now(newyork_tz)
print(f"纽约当前时间: {now_newyork}")

# 可以看到附加了时区信息
# 示例输出:
# 东京当前时间: 2025-07-11 08:01:07.123456+09:00
# 纽约当前时间: 2025-07-10 19:01:07.123456-04:00

在开发国际化服务时,请务必在实现中考虑到时区!


【实践】可直接复制运行!在网页上显示当前时间

最后,我们将利用目前所学的知识,提供一个完整的HTML示例,可以在网页上实时显示日本标准时间(JST)。您可以将此代码另存为HTML文件,直接用浏览器打开即可运行。
※此示例为了实时更新时间,在HTML中包含了JavaScript。

请将以下代码保存为 `clock.html` 之类的文件名,然后用浏览器打开看看。

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>实时时间显示</title>
    <style>
        body {
            background-color: #202124;
            color: #e8eaed;
            font-family: sans-serif;
            display: flex;
            justify-content: center;
            align-items: center;
            height: 100vh;
            margin: 0;
            flex-direction: column;
        }
        h1 {
            color: #669df6;
        }
        #clock {
            font-size: 3rem;
            font-weight: bold;
            background-color: #3c4043;
            padding: 20px 40px;
            border-radius: 10px;
        }
    </style>
</head>
<body>
    <h1>当前日本时间</h1>
    <div id="clock">--:--:--</div>

    <script>
        function updateClock() {
            // 以日本标准时间 (JST, UTC+9) 生成时间
            const now = new Date();
            const jstOffset = 9 * 60; // JST是UTC+9小时
            const localOffset = -now.getTimezoneOffset(); // 本地时区偏移量(分钟)
            const jstNow = new Date(now.getTime() + (jstOffset - localOffset) * 60 * 1000);

            const hours = String(jstNow.getHours()).padStart(2, '0');
            const minutes = String(jstNow.getMinutes()).padStart(2, '0');
            const seconds = String(jstNow.getSeconds()).padStart(2, '0');
            
            document.getElementById('clock').textContent = `${hours}:${minutes}:${seconds}`;
        }

        // 每秒更新一次时钟
        setInterval(updateClock, 1000);

        // 页面加载时首次执行
        updateClock();
    </script>
</body>
</html>

总结

这次,我们学习了如何使用Python的 `datetime` 模块来处理日期和时间。

如果能熟练使用 `datetime` 模块,您能创造的东西的范围就会大大拓宽,比如日志的时间戳、用户注册日期的记录、活动倒计时等。请务必多试试本文中的代码,创造出属于您自己的程序吧!

下一步

熟悉了日期和时间的处理后,接下来要不要挑战一下文件和目录的操作呢?下面的文章解说了如何用Python读写文件、创建和删除文件夹。

使用os模块操作文件和目录 »