問題描述
對下週幾本周幾等進行日期映射
解決方案
利用Python日期時間處理庫dateutil
和硬編碼,代碼粗暴,效果有待檢驗
代碼
time.txt
今天
明天
後天
大後天
大大後天
早上
中午
晚上
傍晚
今日
第一天
明日
第二天
兩天後
第三天
兩天後
第三天
三天後
第四天
四天後
第五天
週一
週二
週三
週四
週五
週六
週日
周天
本週一
本週二
本週三
本週四
本週五
本週六
本週日
本週天
下週一
下週二
下週三
下週四
下週五
下週六
下週日
下週天
下星期一
下星期二
下星期三
下星期四
下星期五
下星期六
下星期日
下星期天
周1
周2
周3
周4
周5
周6
周7
from datetime import date
from dateutil.relativedelta import relativedelta
def parseWeekday(x: str) -> int:
'''解析中文的周幾'''
TODAY = date.today()
if x in ['今天', '今日', '第一天']:
return TODAY
if x in ['明天', '明日', '第二天', '一天後']:
return TODAY + relativedelta(days=+1)
if x in ['後天', '後日', '第三天', '二天後', '兩天後']:
return TODAY + relativedelta(days=+2)
if x in ['大後天', '大後日', '第四天', '三天後']:
return TODAY + relativedelta(days=+3)
if x in ['大大後天', '大大後日', '第五天', '四天後']:
return TODAY + relativedelta(days=+4)
if x in ['大大大後天', '大大大後日', '第六天', '五天後']:
return TODAY + relativedelta(days=+5)
TIME = {
1: ['1', '一'],
2: ['2', '二'],
3: ['3', '三'],
4: ['4', '四'],
5: ['5', '五'],
6: ['6', '六'],
7: ['7', '七', '日', '天']
}
weeks = None
if x.startswith('上') or x.startswith('前'):
weeks = -1
if x.startswith('下') or x.startswith('後') or x.startswith('明'):
weeks = 0
count = 0
for k, v in TIME.items():
for i in v:
if i in x:
count += 1
weekday = k
if count != 1:
return TODAY
elif weeks == 0 or weeks == -1:
return TODAY + relativedelta(weekday=weekday - 1, weeks=weeks)
else:
if TODAY.isoweekday() >= weekday:
return TODAY + relativedelta(days=+1, weekday=weekday - 1, weeks=-1)
else:
return TODAY + relativedelta(days=+1, weekday=weekday - 1)
if __name__ == '__main__':
with open('time.txt', encoding='utf-8') as f:
data = f.read().splitlines()
for x in data:
print(x, parseWeekday(x=x))
結果
今天 2020-06-11
明天 2020-06-12
後天 2020-06-13
大後天 2020-06-14
大大後天 2020-06-15
早上 2020-06-11
中午 2020-06-11
晚上 2020-06-11
傍晚 2020-06-11
今日 2020-06-11
第一天 2020-06-11
明日 2020-06-12
第二天 2020-06-12
兩天後 2020-06-13
第三天 2020-06-13
兩天後 2020-06-13
第三天 2020-06-13
三天後 2020-06-14
第四天 2020-06-14
四天後 2020-06-15
第五天 2020-06-15
週一 2020-06-08
週二 2020-06-09
週三 2020-06-10
週四 2020-06-11
週五 2020-06-12
週六 2020-06-13
週日 2020-06-14
周天 2020-06-14
本週一 2020-06-08
本週二 2020-06-09
本週三 2020-06-10
本週四 2020-06-11
本週五 2020-06-12
本週六 2020-06-13
本週日 2020-06-14
本週天 2020-06-14
下週一 2020-06-15
下週二 2020-06-16
下週三 2020-06-17
下週四 2020-06-11
下週五 2020-06-12
下週六 2020-06-13
下週日 2020-06-14
下週天 2020-06-14
下星期一 2020-06-15
下星期二 2020-06-16
下星期三 2020-06-17
下星期四 2020-06-11
下星期五 2020-06-12
下星期六 2020-06-13
下星期日 2020-06-14
下星期天 2020-06-14
周1 2020-06-08
周2 2020-06-09
周3 2020-06-10
周4 2020-06-11
周5 2020-06-12
周6 2020-06-13
周7 2020-06-14