Python對下週幾本周幾等進行中文日期解析

問題描述

對下週幾本周幾等進行日期映射




解決方案

利用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-141 2020-06-082 2020-06-093 2020-06-104 2020-06-115 2020-06-126 2020-06-137 2020-06-14




參考文獻

  1. Python日期時間處理庫dateutil
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章