看板 Python 關於我們 聯絡資訊
※ 引述《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,或更廣範圍」。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.133.32.131 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1590044449.A.F23.html
kenduest: 改內建的這.. 自己封裝一個function or class不是比較好 05/21 21:53
kenduest: 另外除非你是32bit系統,要不然應該沒2038這個年份限制 05/21 21:56
TakiDog: python 32bit會有這問題,但Lib就應該要通用,所以才在 05/23 17:14
TakiDog: 手冊紀錄吧 05/23 17:14
TakiDog: 改內建有點抖,我自己是都先轉換在喂進去 05/23 17:16
ides13: 了解了,謝謝,樓上兩位,分享知識。 05/23 17:51