Re: [问题] datetime模组能抓民国年吗?

楼主: ides13 (juso)   2020-05-21 15:00:46
※ 引述《LukeSkywaker (路克天醒者)》之铭言:
: 板上的各位大神们好
: 请问datetime模组能抓民国年吗?
: 例如:
: from datetime import datetime
: today = '109/05/07'
: print(datetime.strptime(today, '%Y/%m/%d'))
: 便会出现ValueError: time data '109/05/07' does not match format '%Y/%m/%d'
: 但如果是'2020/05/07'就变正常了
: 先前都是用西元没遇过这问题
: 想请问大家都是怎么抓民国年?
: 还是只能抓出109+1911换算西元吗?
: 谢谢大家
试了很久,不知道如何用继承的方式,重写 Python 的 datetime 模组,
所以尝试修改“_strptime.py”,加入能够抓取“民国年”的功能。
功能:
'T',表示民国年,可以输入1至3个位数的数字。
修改内容如下:
'Y': r"(?P<Y>\d\d\d\d)",
#上面,可以考虑改成“r"(?P<Y>d{1,4})"”,放宽它的格式限制。
#增加的支援民国年的程式码。
#民国年__?P<T>__ for groupdict
'T': r"(?P<T>\d{1,3})",
#民国年功能结束行 ===============================
'z': r"(?P<z>[+-]\d\d[0-5]\d)",
……
elif group_key == 'Y':
year = int(found_dict['Y'])
#增加的支援民国年的程式码。
#民国年 ===============================
elif group_key == 'T': #__?P<T>__ for groupdict
year = int(found_dict['T'])
year += 1911 #加1911年,参考两位数格式
#民国年功能结束行 ===============================
elif group_key == 'G':
iso_year = int(found_dict['G'])
举例:
from datetime import datetime
today = '109/06/12'
print(datetime.strptime(today, '%T/%m/%d'))
另外,技术手册有记载,还要留意年份仅能支援“1970到2038,或更广范围”。
作者: kenduest (小州)   2020-05-21 21:53:00
改内建的这.. 自己封装一个function or class不是比较好另外除非你是32bit系统,要不然应该没2038这个年份限制
作者: TakiDog (多奇狗)   2020-05-23 17:14:00
python 32bit会有这问题,但Lib就应该要通用,所以才在手册纪录吧改内建有点抖,我自己是都先转换在喂进去
楼主: ides13 (juso)   2020-05-23 17:51:00
了解了,谢谢,楼上两位,分享知识。

Links booklink

Contact Us: admin [ a t ] ucptt.com