给出两个日期,例如:
January 1, 2018
February 1, 2018
March 1, 2018
April 1, 2018
May 1, 2018
June 1, 2018
我想得到这个结果:
December 1, 2017
此外,我还想修改间隔。在上面的情况中,间隔是每月。我也希望它每季度和每半年一次。
所以,鉴于June 1, 2018
和March 1, 2018
,它会为半年生成val df = spark.sql("SELECT * FROM csv.`csv/file/path/in/hdfs`")
,依此类推......
我也希望它具有包容性,这意味着也应包括结束日期
是否有python包或函数?
答案 0 :(得分:2)
Pandas有一个非常好的日期时间函数库。
import pandas as pd
start = pd.to_datetime('December 1, 2017')
end = pd.to_datetime('June 1, 2018')
每个月的第一天:
pd.date_range(start, end, freq='MS').strftime('%B %d, %Y').tolist()
['December 01, 2017',
'January 01, 2018',
'February 01, 2018',
'March 01, 2018',
'April 01, 2018',
'May 01, 2018',
'June 01, 2018']
您可以将this chart用于freq
值。
pd.date_range(start, end, freq='QS').strftime('%B %d, %Y').tolist()
['January 01, 2018', 'April 01, 2018']
答案 1 :(得分:2)
Pendulum — and specifically its 'range' function —对此有好处。
它将为您提供月度间隔日期以及我将您称为三个月间隔日期的内容。
>>> import pendulum
>>> start = pendulum.Pendulum(2017, 12, 1)
>>> end = pendulum.Pendulum(2018, 6, 1)
>>> period = pendulum.period(start, end)
>>> [dt.format('%Y-%m-%d') for dt in period.range('months')]
['2017-12-01', '2018-01-01', '2018-02-01', '2018-03-01', '2018-04-01', '2018-05-01', '2018-06-01']
>>> [dt.format('%Y-%m-%d') for dt in period.range('months', 3)]
['2017-12-01', '2018-03-01', '2018-06-01']
答案 2 :(得分:1)
from datetime import datetime
def mrange(d1, d2,s=0): #s for semi-annual
while d1<d2:
y,m=divmod(d1.month+1,12)
d1=datetime(d1.year+y,m,1)
if not s or d1.month==3 :
yield d1
d1='December 1, 2017'
d2='June 1, 2018'
d1 = datetime.strptime(d1,'%B %d, %Y')
d2 = datetime.strptime(d2,'%B %d, %Y')
for s in mrange(d1, d2,):print(s.strftime('%B %d, %Y'))
print('--'*25)
for s in mrange(d1, d2,1):print(s.strftime('%B %d, %Y'))