在 Python 中增加日期字符串 YYYY-MM-DD 的最快方法是啥?

Posted

技术标签:

【中文标题】在 Python 中增加日期字符串 YYYY-MM-DD 的最快方法是啥?【英文标题】:What is the quickest way to increment date string YYYY-MM-DD in Python?在 Python 中增加日期字符串 YYYY-MM-DD 的最快方法是什么? 【发布时间】:2018-10-25 03:58:47 【问题描述】:

在 Pandas 中,我使用的是字符串格式 YYYY-MM-DD 的日期 用YYYY-MM-DD 格式的结果增加日期的最快方法是什么?

d1 = '2018-02-10'

我想将它增加 1 并将结果作为字符串返回:

d1_inc = '2018-02-11'

【问题讨论】:

“快速”是什么意思?你都尝试了些什么?请分享一些代码。确保澄清问题,使其不是基于意见的 【参考方案1】:

纯 Python

您可以使用datetime 模块,它是标准库的一部分。有3个步骤:

    通过strptime将字符串转换为datetime对象。 通过timedelta添加一天。 通过strftime将生成的datetime对象转换回字符串。

这是一个演示:

from datetime import datetime, timedelta

x = '2017-05-15'
res = (datetime.strptime(x, '%Y-%m-%d') + timedelta(days=1)).strftime('%Y-%m-%d')

print(res)    
# 2017-05-16

熊猫

可以使用第 3 方 Pandas 执行等效步骤:

x = '2017-05-15'

# choose some combination of below methods
res = (pd.Timestamp(x) + pd.DateOffset(days=1)).strftime('%Y-%m-%d')
res = (pd.to_datetime(x) + pd.Timedelta('1 day')).strftime('%Y-%m-%d')

print(res)
# 2017-05-16

【讨论】:

【参考方案2】:

使用pd.to_datetimepd.TimeDeltastrftime

fmt = '%Y-%m-%d'
(pd.to_datetime(<your series or column>, format=fmt) + pd.Timedelta('1 days')).dt.strftime(date_format=fmt)

示例

df = pd.DataFrame('date': ['2017-04-02', '2017-04-23'])
fmt = '%Y-%m-%d'
>>> (pd.to_datetime(df.date, format=fmt) + pd.Timedelta('1 days')).dt.strftime(date_format=fmt)
0    2017-04-03
1    2017-04-24
Name: date, dtype: object

【讨论】:

【参考方案3】:

您可以使用 datetime 和 timedelta 对象执行算术运算。

from datetime import datetime, timedelta

d = datetime(year=2018, month=3, day=1)
t = timedelta(days=1)

d + t
# datetime.datetime(2018, 3, 2, 0, 0)

d + t + t
# datetime.datetime(2018, 3, 3, 0, 0)

for i in range(30):
    d += 1

print(d)
# datetime.datetime(2018, 3, 31, 0, 0)

【讨论】:

【参考方案4】:

你的意思是这样的

date = datetime.date(2015,5,15)
date += datetime.timedelta(days=1)

【讨论】:

【参考方案5】:

这取决于您所说的最快是什么意思。我假设您的意思是最快的编程方式,而不是最短的程序执行时间(这在您执行大量此类操作时可能是相关的)。

from datetime import datetime, timedelta

original_date = '2018-5-15'

print('The original date is , the date one day later is: '.
       format(original_date, (datetime.strptime(original_date, '%Y-%m-%d') + 
       timedelta(days=1)).strftime('%Y-%m-%d')

分步版本:

从字符串创建一个日期时间对象,注意显示python格式的字符串(见the documentation for more information)

dt = datetime.strptime(original_date, '%Y-%m-%d')

增加一天

dt += timedelta(days=1)

将其重新格式化为请求的字符串

print(dt.strftime('%Y-%m-%d'))

就是这样!

【讨论】:

我的意思是最快的执行时间。 啊酷,check this answer 了解如何加快 strp/ftime 的一些想法。并行化也将有很大帮助(如果您没有对数据进行任何本质上串行的操作)。根据您的范围,可能值得研究完全避免日期/日期时间对象。只需硬编码整个事情,包括闰年。

以上是关于在 Python 中增加日期字符串 YYYY-MM-DD 的最快方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

PostgreSQL 中的 YYYY-MM 列类型

用代码实现使当前日期 Date型的数据增加一个月

hive怎么把日期转化成yyyy-mm格式?

PHP之日期获取月首月尾(YYYY-MM)

python3练习:针对某一日期增加或减少时间天数

如何将 DateTime 值序列化为“yyyy-MM”? [复制]