10 个处理日期和时间的 Python 一行代码

B站影视 韩国电影 2025-06-06 04:10 2

摘要:时间数据无处不在。从金融交易到传感器日志,有许多应用场景中,描述时间的数招建立在现实世界的数据集中——例如年份的日期或标记精确时刻的时间戳。毫不奇怪,Python 提供了丰富的内置功能和库,用于对包含日期和时间的数据进行不同操作、预处理和分析。本文展示了十个

时间数据无处不在。从金融交易到传感器日志,有许多应用场景中,描述时间的数招建立在现实世界的数据集中——例如年份的日期或标记精确时刻的时间戳。毫不奇怪,Python 提供了丰富的内置功能和库,用于对包含日期和时间的数据进行不同操作、预处理和分析。本文展示了十个 Python 单行代码,用于高效简洁地处理常见的日期时间任务。

请注意,这些单行代码中的一些可能需要在代码开头导入特定的模块,即:

from datetime import datetime, date, deltaimport pandas as pdimport numpy as np


尽管它看起来不太自然,但 ISO 8601 时间戳格式标准因其低歧义性、机器可读性,以及最重要的是许多现代 API 如 GraphQL 和 RESTful 服务的广泛使用,而变得极其有用。这个标准甚至能让你的日期时间数据具有时区感知能力(这句话听起来是不是有点绕口?)。

以下是获取 ISO 8601 格式当前时间戳的方法:

print(datetime.now.isoformat)

输出:


这是一个非常常见的数据转换需求。日期 datetime.strptime 函数,意为"字符串解析为时间",接受两个参数:要转换的日期字符串,以及一个格式模板,用于指示完整日期的各组成部分在输入字符串中的显示方式。这有助于正确解析年份、月份、日期、小时等元素。以下示例将字符串"2025-05-10"解析为与 2025 年 5 月 10 日关联的 datetime 对象。

parsed_date = datetime.strptime("2025-05-10", "%Y-%m-%d")

试着做一下,比如 parsed_date.day。你应该得到 10,这是解析日期中的月份天数。


通过使用 timedelta 函数,可以向给定的 日期 日期时间 对象添加(或减去)时间间隔。例如,这个函数可以接受一个参数来指定天数,并基于给定日期(如今天)向前或向后“旅行”指定天数。

例如,我们将当前日期向前移动7天(截至本文写作时是5月10日):

print(date.today + timedelta(days=7))

它就变成了2025年5月17日。

取两个表示不同日期的 Python date 对象,它们在时间上相隔一段时间。例如,某人的生日和随后的除夕。要计算这两个日期之间相隔多少自然日,我们可以简单地相减这两个对象,并访问原始相减结果的 days 属性,如下所示:

print((date(2025, 12, 31) - date(2025, 6, 29)).days)

结果是一个整数值,在这个例子中是185天。


类似于原生 Python 的 range(n) 定义从 0 到 n-1 的整数范围,常用于可迭代操作,强大的通用数据分析、预处理和数据处理库 Pandas,提供了一个函数来定义以天为单位的连续日期范围,起始日期可指定。生成的范围可以轻松放入原生 Python 集合中,如简单的列表,如下所示:

print(pd.date_range(start="2025-01-01", periods=5).tolist)

重要的是,这个范围内的结果元素被建模为 Pandas 的 timestamp 对象:

[Timestamp('2025-01-01 00:00:00'), Timestamp('2025-01-02 00:00:00'), Timestamp('2025-01-03 00:00:00'), Timestamp('2025-01-04 00:00:00'), Timestamp('2025-01-05 00:00:00')]


这一条也与 Pandas 相关,具体是针对一个由多个属性描述并存储在 DataFrame 对象中的数据集。假设我们有一个名为 df 的 DataFrame,其中包含一个'date'属性,该属性包含字符串。这条极其简单的单行代码将自动将此属性下的所有实例级值转换为 datetime 对象。

pd.to_datetime(df['date'])

通过打印结果,你可能会得到如下输出,其中类型确实得到了验证:

0 2025-01-011 2025-01-022 2025-01-03Name: date, dtype: datetime64[ns]


这个单行代码特别适用于构建友好的图形用户界面(GUI),例如在基于 Web 的应用程序中。假设你想显示今天的星期几,但不是从 1 到 7 的序数,而是星期的名称本身,即星期一、星期二、星期三等等。《strftime("%A")》格式化属性可以解决这个问题,具体方法如下:

print(datetime(2025, 5, 10).strftime("%A"))

现在,我正在一个阳光明媚的 Saturday 下午为你撰写这篇文章。免责声明:我喜欢写作 ;)


假设你正在处理每日记录的时间序列数据,例如每日温度读数,并且你决定将数据聚合为月度平均值。你可能需要获取一组与月份相关的时间戳,以便在可视化和其他方面正确标记你新聚合的数据。例如,从1月到5月的月度"标签"可以这样获取:

print(np.arange('2025-01', '2025-06', dtype='datetime64[M]'))

结果将是: ['2025-01' '2025-02' '2025-03' '2025-04' '2025-05']


回到描述具有多个属性的数据集的场景,其中一个属性是日期属性,我们提取 DataFrame 的行部分,选取那些在日期属性上满足布尔条件的实例。

这个例子选择了包含在 date 中的日期晚于 2025 年 1 月 15 日的数据实例(整行):


在大多数例子中,我们保持简单,并在示例数据中考虑了日级别的粒度。让我们以一个具有指定小时、分钟和秒级信息的更精细和详细的 datetime 对象来结束。

这个例子中,输入的是下午 15:30:45 的当前日期,它获取了 Unix 时间戳,即特定时间点的数字表示,通常对于高效存储、比较和跨不同系统同步基于时间的非常有用的数据。我们人类不太容易理解;但对机器来说非常容易理解。

print(int(datetime(2025, 5, 10, 15, 30, 45).timestamp))

时间戳原本是一个浮点数(在示例中为1746891045.0),但为了方便表示,它已被转换为整数。

来源:自由坦荡的湖泊AI一点号

相关推荐