小能豆

将 int(yyyymmdd) 转换为 datetime 对象和 str 的便捷方法

py

使用 Python 3.8、Pandas 1.14

我有一个整数值 20210126

我想创建一个 datetime 对象和它的 str 对象。

当前方法:

dt = 20210126
dt_dt = datetime(year=d_i//10000, month=(d_i%10000)//100, day=d_i%100)
str_dt = dt_dt.strftime("%Y%m%d")

选择:

dt = 20210126
dt_dt = datetime(year=int(str(d_i)[:3]), month=int(str(d_i)[3:5]), day= int(str(d_i)[5:])
str_dt = str(dt)

这很好用,但是想知道是否有方便的方法。


阅读 22

收藏
2024-12-04

共1个答案

小能豆

在 Python 中,可以通过 pandas 提供的 to_datetime() 函数来简化这个过程。pandas.to_datetime() 可以将整数或字符串转换为 datetime 对象,同时还能灵活地将其格式化为字符串。对于您的例子,可以如下操作:

使用 pandas.to_datetime() 的方法

import pandas as pd

dt = 20210126

# 将整数值转换为 datetime 对象
dt_dt = pd.to_datetime(str(dt), format='%Y%m%d')

# 将 datetime 对象转换为字符串
str_dt = dt_dt.strftime('%Y%m%d')

print(dt_dt)   # 输出 datetime 对象
print(str_dt)  # 输出格式化后的字符串

解释:

  1. pd.to_datetime(str(dt), format='%Y%m%d'):
  2. 这里首先将整数 20210126 转换为字符串 '20210126',然后使用 pandas.to_datetime() 将其按照指定的日期格式 '%Y%m%d' 转换为 datetime 对象。

  3. dt_dt.strftime('%Y%m%d'):

  4. 这是将 datetime 对象格式化为字符串的标准方法,格式 %Y%m%d 确保它以 yyyyMMdd 的形式呈现。

优点:

  • pandas.to_datetime() 是专门为日期时间转换而设计的,能够处理各种复杂的日期格式并提供更简洁的代码。
  • 不需要手动解析年、月、日,pandas 会根据格式字符串自动处理。

如果没有 pandas,使用标准 datetime 库:

如果不想依赖 pandas,可以通过 datetime 模块完成这项任务。您的原始方法已经很接近了,但还可以简化为:

from datetime import datetime

dt = 20210126

# 将整数转换为 datetime 对象
dt_dt = datetime.strptime(str(dt), '%Y%m%d')

# 将 datetime 对象转换为字符串
str_dt = dt_dt.strftime('%Y%m%d')

print(dt_dt)   # 输出 datetime 对象
print(str_dt)  # 输出格式化后的字符串

解释:

  • datetime.strptime(str(dt), '%Y%m%d'):
  • strptime 是将字符串解析为 datetime 对象的函数,使用 %Y%m%d 格式来解析整数值 20210126
  • strftime('%Y%m%d'):
  • 使用 strftimedatetime 对象格式化为指定的字符串形式。

这样,你就能得到一个简洁的解决方案,无论是使用 pandas 还是标准库 datetime

2024-12-04