分割和格式化日期范围

问题描述 投票:0回答:2

我正在用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)

但是要不断出错。任何建议将不胜感激,谢谢

python pandas zapier
2个回答
1
投票
这是一种实现方法:

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')


0
投票
分割两个日期并将它们记录到一个变量中:

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'

转换开始日期:

[dateutilrelativedelta函数将帮助我们从开始日期减去一年:

from dateutil.relativedelta import relativedelta adjusted_start_date = start_date - relativedelta(years=1) print(adjusted_start_date.strftime(date_format)) '04/12/2019'

© www.soinside.com 2019 - 2024. All rights reserved.