Python datetime与time模块核心用法详解

顾言
顾言
发布时间:2026-10-15| 3人浏览过
原创

本文详细介绍Python中datetime和time两个核心时间处理模块。涵盖timedelta时间增量、timezone时区创建、datetime与字符串的双向转换、时间戳互转、时间运算以及time模块的当前时间获取、休眠等功能,提供完整代码示例。

在Python开发中,处理日期和时间主要依赖两个内置模块:datetime和time。datetime模块提供了更高级的时间对象和操作,而time模块则侧重于底层的时间戳和格式化。了解这两个模块的功能及区别,有助于更高效地进行时间相关的编程工作。

要创建一个表示时间增量的对象,可以使用。该对象支持小时、天、秒、毫秒等参数。例如,通过指定hours=2,可以生成一个代表2小时的时间增量对象。打印该对象及其类型,可以看到其格式为“天:小时:分钟:秒”的形式,类型为datetime.timedelta。

# coding:utf-8

from datetime import timedelta

if __name__ == '__main__':
    # 常用参数 hours:小时 days:天 seconds:秒 milliseconds:毫秒
    delta = timedelta(hours=2)
    print(delta)  # 2:00:00
    print(type(delta))  # <class 'datetime.timedelta'>

结合,可以通过timedelta来创建时区对象。具体做法是先定义一个timedelta(如2小时),然后将其作为参数传入timezone构造函数。这样生成的时区对象(如UTC+02:00)可用于后续的时间计算,确保时间处理符合特定时区标准。

# coding:utf-8

from datetime import timedelta, timezone

if __name__ == '__main__':
    delta = timedelta(hours=2)
    zone = timezone(delta)  #配合timedelta创建时区对象
    print(zone)  # UTC+02:00
    print(type(zone))  # <class 'datetime.timezone'>

展示了如何获取当前时间。调用datetime.now()可返回当前系统的datetime对象,包含年月日时分秒及微秒信息。若需获取特定时区的当前时间,可将之前创建的timezone对象作为参数传入,例如指定东九区时间。

datetime.now(timezone) 获取当前时间datetime对象
# coding:utf-8

from datetime import timedelta, timezone, datetime

if __name__ == '__main__':
    '''
    获取当前时间,可以获取指定时区的当前时间
    datetime.now(timezone)
    '''
    now = datetime.now()
    print(now)  # 2022-02-23 13:59:59.224286
    print(type(now))  # <class 'datetime.datetime'>

    # 设置指定时区的当前时间
    print(datetime.now((timezone(timedelta(hours=9)))))  # 2022-02-23 14:59:59.224286+09:00

将datetime对象转换为字符串时,使用方法。该方法接受一个格式化字符串fmt,其中包含%Y(年)、%m(月)、%d(日)、%H(时)、%M(分)、%S(秒)等占位符。例如,将当前时间格式化为“YYYY-MM-DD HH:MM:SS”形式,便于存储或展示。

# coding:utf-8

from datetime import datetime

if __name__ == '__main__':
    '''
    datetime.strftime(fmt)
    将时间对象转换成字符串
    fmt:格式化标准,由格式符组成
    常用格式符(年:%Y,月:%m,日:%D,时:%H,分:%M,秒:%S)
    '''
    now = datetime.now()
    print(now.strftime('%Y-%m-%d %H:%M:%S'))  # 2022-02-23 14:04:24

反之,将字符串解析为datetime对象需使用。此方法要求输入的字符串格式必须与提供的fmt完全匹配。若格式不匹配(如字符串缺少小时部分而fmt要求包含),则会抛出错误。正确使用时,可将指定时间的字符串转换为datetime对象,便于后续计算。

# coding:utf-8
from datetime import datetime

if __name__ == '__main__':
    '''
    datetime.strptime(date_string,fmt)
    将字符串转换成时间对象,要求date_string的格式完全匹配fmt格式化标准
    '''
    time_obj = datetime.strptime('2022-2-22', '%Y-%m-%d')
    # datetime.strptime('2022-2-22', '%Y-%m-%d %H') Error date_string 中不存在小时而fmt中要求有小时
    print(datetime.strptime('2022-2-22 14', '%Y-%m-%d %H'))  # 2022-02-22 14:00:00
    print(time_obj)  # 2022-02-22 00:00:00
    print(type(time_obj))  # <class 'datetime.datetime'>

获取当前时间的秒级时间戳(浮点数)可通过实现。该方法接收一个datetime对象,返回从1970年1月1日至今的秒数(含微秒的小数部分)。这在需要与Unix时间戳交互的场景中非常有用。

# coding:utf-8

from datetime import datetime

if __name__ == '__main__':
    '''
    datetime.timestamp(datetime_obj) 
    datetime_obj:datetime 时间对象
    返回 float
    '''
    print(datetime.timestamp(datetime.now()))  # 1645598565.715

展示了如何将秒级时间戳转换回datetime对象。输入一个浮点型的时间戳t,方法返回对应的datetime对象。例如,将1645598565.715转换后,可得到具体的日期和时间,便于人类阅读或进一步处理。

# coding:utf-8

from datetime import datetime, timedelta, timezone

if __name__ == '__main__':
    '''
    datetime.fromtimestamp(t)
    t:秒级时间戳 float类型
    返回:datetime时间对象
    '''
    datetime_obj = datetime.fromtimestamp(1645598565.715)
    print(datetime_obj)  # 2022-02-23 14:42:45.715000
    print(type(datetime_obj))  # <class 'datetime.datetime'>

利用,可以对datetime对象进行加减运算。通过加上或减去timedelta对象,可实现时间的推移或回溯。例如,计算3小时后的时间或3小时前的时间,只需对当前datetime对象执行+或-timedelta操作即可。建议timedelta参数使用正数,以提高代码可读性。

# coding:utf-8

from datetime import datetime, timedelta, timezone

if __name__ == '__main__':
    now = datetime.now()
    fmt = '%Y-%m-%d %H:%M:%S'
    print(now.strftime(fmt))  # 2022-02-23 15:07:01

    # 3小时后时间
    print((now + timedelta(hours=3)).strftime(fmt))  # 2022-02-23 18:07:01

    # 3小时前时间
    print((now - timedelta(hours=3)).strftime(fmt))  # 2022-02-23 12:07:01
    print((now + timedelta(hours=-3)).strftime(fmt))  # 2022-02-23 12:07:01

    # 建议timedelta的参数都使用正数(容易理解)

time模块提供了更底层的时间处理功能,适用于需要直接操作时间戳或进行简单时间格式化的场景。与datetime相比,time模块更轻量,但功能相对基础。

展示了如何获取当前时间的秒级时间戳。调用time.time()即可返回一个浮点数,表示从1970年1月1日至今的秒数。该值包含微秒精度,常用于记录事件发生的时间点或计算程序运行耗时。

# coding:utf-8

import time

if __name__ == '__main__':
    print(time.time())  # 1645667203.7236724

将秒级时间戳转换为time结构体对象,可使用。若不传参数,默认使用当前时间戳;若传入特定秒数,则转换为对应时间的time.struct_time对象。该对象包含年、月、日、时、分、秒、星期、一年中的第几天及夏令时标志等详细信息。

# coding:utf-8

import time

if __name__ == '__main__':
    # second 不填,则默认当前的时间戳
    t = time.localtime(time.time())
    t2 = time.localtime()
    print(t)  # time.struct_time(tm_year=2022, tm_mon=2, tm_mday=24, tm_hour=10, tm_min=10, tm_sec=8, tm_wday=3, tm_yday=55, tm_isdst=0)
    print(t2)  # time.struct_time(tm_year=2022, tm_mon=2, tm_mday=24, tm_hour=10, tm_min=10, tm_sec=8, tm_wday=3, tm_yday=55, tm_isdst=0)
    print(type(t))  # <class 'time.struct_time'>
    print(type(t2))  # <class 'time.struct_time'>

将time结构体对象格式化为字符串,使用。该方法接受格式化字符串fmt和time对象(可选,默认为当前时间)。例如,将当前时间加3600秒后的时间格式化为“YYYY-MM-DD HH:MM:SS”,便于展示或日志记录。

# coding:utf-8

import time

if __name__ == '__main__':
    """
    time.strftime(fmt,time_obj)
    fmt:格式化标准 参考 datetime.strftime(fmt)
    time_obj:time时间对象,不填默认是当前日期的time时间对象
    """
    t = time.localtime(time.time() + 3600)
    print(time.strftime('%Y-%m-%d %H:%M:%S'))  # 2022-02-24 10:16:17
    print(time.strftime('%Y-%m-%d %H:%M:%S', t))  # 2022-02-24 11:16:17

展示了如何将字符串解析为time结构体对象。与datetime.strptime类似,需确保字符串格式与fmt完全匹配。例如,将“YYYY-MM-DD HH:MM:SS”格式的字符串转换为time.struct_time对象,便于进行时间计算或比较。

# coding:utf-8

import time

if __name__ == '__main__':
    """
    time.strptime(time_string,fmt)
    参考 datetime.strptime(date_string,fmt)
    time_string:时间字符串
    fmt:格式化标准
    """
    fmt = '%Y-%m-%d %H:%M:%S'
    t = time.strftime(fmt, time.localtime())
    print(t)  # 2022-02-24 10:25:17
    print(time.strptime(t, fmt))  # time.struct_time(tm_year=2022, tm_mon=2, tm_mday=24, tm_hour=10, tm_min=25, tm_sec=40, tm_wday=3, tm_yday=55, tm_isdst=-1)

若需让程序暂停执行一段时间,可使用。传入秒数(浮点数),程序将休眠指定时间后继续执行。这在模拟延迟、控制请求频率或测试场景中非常有用。例如,休眠2秒后再次获取时间戳,可验证休眠效果。

# coding:utf-8

import time

if __name__ == '__main__':
    print(time.time())  # 1645670183.6567423
    time.sleep(2)
    print(time.time())  # 1645670185.6708047

本文介绍了Python中datetime和time模块的核心功能与常用方法。通过实际代码示例,展示了时间对象的创建、转换、运算及格式化等关键操作。掌握这些知识,可更高效地处理Python项目中的时间相关问题。如需了解更多内容,建议查阅官方文档或参考本站其他相关文章。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。