我正在用zapier中的电子邮件解析日期范围。这是其中的内容:2020年12月4日至1月4日,我需要将开始日期和结束日期分隔为12/04/2019和01/04/2020之类的内容,这是因为某些日期会在前一个日期开始如上面的示例中的year,并且某些年份将在同一年,例如2020年3月4日至3月22日。似乎在zapier中使用的代码是python。我看过熊猫的例子
import pandas as pd
date_series = pd.date_range(start='Mar 4' -, end='Mar 7, 2020')
print(date)
但是要不断出错。任何建议将不胜感激,谢谢
def parse_email_range(date_string):
dates = date_string.split(' - ')
month_1 = pd.to_datetime(dates[0], format='%b %d').month
month_2 = pd.to_datetime(dates[1]).month
day_1 = pd.to_datetime(dates[0], format='%b %d').day
day_2 = pd.to_datetime(dates[1]).day
year_2 = pd.to_datetime(dates[1]).year
year_1 = year_2 if (month_1 < month_2) or (month_1 == month_2 and day_1 < day_2) else year_2 - 1
return pd.date_range(start=f'{year_1}-{month_1}-{day_1}', end=f'{year_2}-{month_2}-{day_2}')
parse_email_range('Dec 4 - Jan 4, 2020')
## DatetimeIndex(['2019-12-04', '2019-12-05', '2019-12-06', '2019-12-07',
## '2019-12-08', '2019-12-09', '2019-12-10', '2019-12-11',
## '2019-12-12', '2019-12-13', '2019-12-14', '2019-12-15',
## '2019-12-16', '2019-12-17', '2019-12-18', '2019-12-19',
## '2019-12-20', '2019-12-21', '2019-12-22', '2019-12-23',
## '2019-12-24', '2019-12-25', '2019-12-26', '2019-12-27',
## '2019-12-28', '2019-12-29', '2019-12-30', '2019-12-31',
## '2020-01-01', '2020-01-02', '2020-01-03', '2020-01-04'],
## dtype='datetime64[ns]', freq='D')
raw_dates = 'Dec 4 - Jan 4, 2020'.split(" - ")
dateutil
包能够解析大多数日期:
from dateutil.parser import parse
从原始日期解析并分离开始和结束日期:
start_date, end_date = (parse(date) for date in raw_dates)
strftime
是可用于格式化日期的方法。将所需格式存储在变量中(请注意,我使用的是第一天的格式):
date_format = '%d/%m/%Y'
将结束日期转换为所需的格式:
print(end_date.strftime(date_format)) '04/01/2020'
转换开始日期:[
dateutil
的relativedelta
函数将帮助我们从开始日期减去一年:
from dateutil.relativedelta import relativedelta adjusted_start_date = start_date - relativedelta(years=1) print(adjusted_start_date.strftime(date_format)) '04/12/2019'