Python datetime库在RPA流程中的时间处理实战

竹里
竹里
发布时间:2026-10-13| 5人浏览过
原创

本文详解Python中datetime库在RPA流程自动化中的应用,涵盖获取当前与指定时间、datetime与timestamp互转、字符串解析、日期加减及多时区转换等核心操作,帮助开发者高效处理时间数据。

Python datetime库在RPA流程中的时间处理实战

在RPA流程自动化的实际场景中,经常需要处理与时间相关的操作,此时可借助Python标准库datetime提供的方法进行高效处理。

datetime是Python官方提供的用于处理日期和时间的标准库。

获取当前与指定日期时间

1、获取当前日期和时间

首先介绍如何获取当前的日期和时间信息:


>>> from datetime import datetime
>>> now = datetime.now()
>>> print(now)
2019-11-23 11:12:32.715604
>>> print(type(now))
<class 'datetime.datetime'>

需要注意的是,datetime既是一个模块名,也是一个类名。通过 from datetime import datetime 导入的是 datetime 这个类;若仅使用 import datetime 导入模块,则必须通过 datetime.datetime 这种全名方式引用。

若仅导入 import datetime,则必须引用全名 datetime.datetime。

调用 datetime.now() 可返回当前的日期和时间,其返回值的类型为 datetime。

2、获取指定日期和时间

若需指定特定的日期和时间,可直接通过参数构造一个 datetime 对象:


>>> from datetime import datetime
>>> time = datetime(2008,8,8,8,8) # 用指定日期时间创建 datetime
>>> print(time)
2008-08-08 08:08:00

datetime与timestamp互转

3、datetime 转换为 timestamp

在计算机底层,时间以数字形式存储。我们将 1970 年 1 月 1 日 00:00:00 UTC+00:00 时区的时刻定义为 epoch time,记为 0(1970 年之前的时间 timestamp 为负数)。当前时间即为相对于 epoch time 的秒数,称为 timestamp。

可以理解为:


timestamp = 0 = 1970-1-1 00:00:00 UTC+0:00

对应的北京时间显示为:


timestamp = 0 = 1970-1-1 08:00:00 UTC+8:00

由此可见,timestamp 的值与时区无关。一旦 timestamp 确定,其对应的 UTC 时间即已确定,转换到任意时区的时间也是完全确定的。正因全球计算机在任意时刻的 timestamp 完全一致(假设时间已校准),计算机内部存储当前时间通常采用 timestamp 格式。

将 datetime 类型转换为 timestamp,只需简单调用 timestamp() 方法:


>>> from datetime import datetime
>>> time = datetime(2019,11,23,11,25)
>>> time.timestamp()
1574479500.0

需注意,Python 中的 timestamp 是一个浮点数。若包含小数位,小数部分表示毫秒数。

4、timestamp 转换为 datetime

要将 timestamp 转换回 datetime,可使用 datetime 提供的 fromtimestamp() 方法:


>>> from datetime import datetime
>>> time = 1574479500.0
>>> print(datetime.fromtimestamp(time))
2019-11-23 11:25:00

需注意,timestamp 是一个浮点数,不包含时区信息,而 datetime 对象包含时区。上述转换是基于 timestamp 与本地时间进行的。

本地时间指当前操作系统设定的时区。例如,北京时区为东 8 区,则本地时间显示为:2019-11-23 11:25:00

实际上,这等同于 UTC+8:00 时区的时间:2019-11-23 11:25:00 UTC+8:00

此时,格林威治标准时间(UTC+0:00)与北京时间相差 8 小时,因此 UTC+0:00 时区的时间应为:

2019-11-23 03:25:00 UTC+0:00

timestamp 也可直接转换为 UTC 标准时区的时间:


>>> from datetime import datetime
>>> time = 1574479500.0
>>> print(datetime.fromtimestamp(time))
2019-11-23 11:25:00
>>> print(datetime.utcfromtimestamp(time)) # UTC 时间
2019-11-23 03:25:00

字符串与datetime转换

5、str 转换为 datetime

用户输入的日期和时间通常为字符串。在处理日期时间前,需先将 str 转换为 datetime。转换通过 datetime.strptime() 实现,该方法需要一个指定日期和时间格式的格式化字符串:


>>> from datetime import datetime
>>> today = datetime.strptime('2019-11-23 11:34:49','%Y-%m-%d %H:%M:%S')
>>> print(today)
2019-11-23 11:34:49
>>>

字符串 '%Y-%m-%d %H:%M:%S' 规定了日期和时间部分的格式。需注意,转换后的 datetime 对象不包含时区信息。

6、datetime 转换为 str

若已有 datetime 对象,需将其格式化为字符串展示给用户,则需转换为 str。转换通过 strftime() 实现,同样需要一个日期和时间的格式化字符串:


>>> from datetime import datetime
>>> now = datetime.now()
>>> print(now.strftime('%a, %b %d %H:%M'))
Sat, Nov 23 14:45

日期加减运算

7、datetime 加减

对日期和时间进行加减,实质是将 datetime 向后或向前计算,得到新的 datetime。加减可直接使用 + 和 - 运算符,但需先导入 timedelta 类:


>>> from datetime import datetime,timedelta
>>> now = datetime.now()
>>> now
datetime.datetime(2019, 11, 23, 14, 49, 49, 739236)
>>> now + timedelta(hours = 5)
datetime.datetime(2019, 11, 23, 19, 49, 49, 739236)
>>> now - timedelta(days = 1)
datetime.datetime(2019, 11, 22, 14, 49, 49, 739236)
>>> now - timedelta(days = 3,hours = 3)
datetime.datetime(2019, 11, 20, 11, 49, 49, 739236)

可见,使用 timedelta 可轻松计算出前几天或后几天的具体时刻。

本地时间与UTC及多时区转换

8、本地时间转换为 UTC 时间

本地时间指系统设定的时区时间,例如北京时间为 UTC+8:00,而 UTC 时间指 UTC+0:00 时区的时间。

datetime 类型包含一个时区属性 tzinfo,但默认值为 None,因此无法区分该 datetime 属于哪个时区,除非强制为 datetime 设置时区:


>>> from datetime import datetime,timedelta,timezone
>>> time_utc = timezone(timedelta(hours=8)) # 创建时区 UTC+8:00
>>> now = datetime.now()
>>> now
datetime.datetime(2019, 11, 23, 14, 55, 5, 901745)
>>> now_utc = now.replace(tzinfo=time_utc) # 强制设置为 UTC+8:00
>>> now_utc
datetime.datetime(2019, 11, 23, 14, 55, 5, 901745, tzinfo=datetime.timezone(datetime.timedelta(0, 28800)))

若系统时区恰好为 UTC+8:00,上述代码正确;否则,不能强制设置为 UTC+8:00 时区。

9、时区转换

可先通过 utcnow() 获取当前 UTC 时间,再转换为任意时区的时间:


>>> utc_time = datetime.utcnow().replace(tzinfo=timezone.utc) # 拿到 UTC 时间,并强制设置时区为 UTC+0:00
>>> print(utc_time)
2019-11-23 07:05:25.865221+00:00
>>>
>>> bj_time = utc_time.astimezone(timezone(timedelta(hours=9))) #astimezone() 将转换时区为东京时间
>>> print(bj_time)
2019-11-23 16:05:25.865221+09:00
>>>
>>> dj_time = utc_time.astimezone(timezone(timedelta(hours=9))) #转换时区为东京时间
>>> print(dj_time)
2019-11-23 16:05:25.865221+09:00
>>>
>>> dj_time2 = bj_time.astimezone(timezone(timedelta(hours=9))) #将北京时间转换时区为东京时间
>>> print(dj_time2)
2019-11-23 16:05:25.865221+09:00

时区转换的关键在于,获取 datetime 时需明确其正确时区,并强制设置该时区作为基准时间。

利用带时区的 datetime,通过 astimezone() 方法,可转换到任意时区。

注:并非必须从 UTC+0:00 时区转换到其他时区,任何带时区的 datetime 均可正确转换,例如上述 bj_time 到 dj_time2 的转换。

小结

datetime 表示的时间需包含时区信息才能确定特定时间,否则仅能视为本地时间。

若需存储 datetime,最佳方法是将其转换为 timestamp 再存储,因为 timestamp 的值与时区完全无关。

免费下载试用: https://support.i-search.com.cn/

以上所述是使用Python的datetime库处理时间(RPA流程)的相关内容,希望对大家有所帮助。如有任何疑问,欢迎留言,小编会及时回复大家!

相关标签:

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

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 算法库。