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



在熊猫中,我使用的是字符串格式的日期YYYY-MM-DDYYYY-MM-DD格式递增日期的最快方法是什么?

d1 = '2018-02-10'

我想将其递增 1 并将结果恢复为字符串:

d1_inc = '2018-02-11'

纯Python

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

  1. 通过strptime将字符串转换为datetime对象。
  2. 通过timedelta添加一天。
  3. 通过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

熊猫

可以使用第三方 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

使用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

您可以对日期时间和时间增量对象执行算术运算。

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)

你的意思是这样的

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

这取决于你所说的最快是什么意思。我假设你的意思是最快的编程方法,而不是最短的程序执行时间(当你做很多这些事情时,这可能是相关的(。

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 格式的字符串(有关更多信息,请参阅文档(

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

添加日期

dt += timedelta(days=1)

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

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

就这样!

相关内容

最新更新