喵喵程式-民國年輸入與確認

 Python版本3.7

需引用time套件,如果是用Anaconda安裝的應該是有內建了,如果發現import有問題,記得安裝 pip install time

台灣人的累的地方,民國年,基本上台灣網頁都有分民國年和西元年二種,在爬蟲的時候會造成問題。

1. 日期計算,有時候我們爬出來的資料可能長這樣1100101,民國110年1月1日,這種基本上不能用計算,同一個月還可以用減的,跨月就會掛掉,而且還有閏年的問題。

2. 輸入的時候,在爬蟲的時候有時候會需要輸入查詢日期,大部分我在寫程式的時候都會作防呆,以防止有人輸錯字、日期錯誤、全半形錯誤、格式錯誤、少輸入字等等......有趣的狀況。

以下示範怎麼設定輸入民國年月日的防呆:

import time
day_f=str(input("請輸入起日 (yyymmdd):"))
while True:
    try:
        time.strptime(str((int(day_f[0:3])+1911))+day_f[3:],"%Y%m%d")
        break
    except:
        print("日期格式輸入錯誤,請重新輸入。")
        day_f=str(input("請輸入起日 (yyymmdd):"))
day_f=str(input("請輸入起日 (yyymmdd):"))

這個是片段,我原始的設計是有day_f和day_l,起日與迄日,day_l寫法一樣,換個字就好,在經驗上看到yyymmdd的台灣人大概就知道是要輸民國年,當然也可以在加上其他字作更多提示。設定輸入字串可以減少後面的問題

while True:
    try:
        time.strptime(str((int(day_f[0:3])+1911))+day_f[3:],"%Y%m%d")
        break
    except:
        print("日期格式輸入錯誤,請重新輸入。")
        day_f=str(input("請輸入起日 (yyymmdd):"))

這裡先從裡面講,day_f[0:3]這裡是作字串的片切 (slice),片切是頭算尾不算,第一個字編號是0。以輸入字元1100101來說,day_f[0:3]可以取出110

str((int(day_f[0:3])+1911)),int(day_f[0:3])因為要運算,所以要換成整數,+1911換成西元年,再轉回字串,才能和後面作連接

time.strptime(............. ,"%Y%m%d"),這邊就是用time套件的字串轉日期功能,"%Y%m%d"轉換時西園日期格是應該是yyyymmdd,不同的格式就要不一樣,例如:yyyy/mm/dd,就要用"%Y/%m/%d"。

while True:............ try: .......... except: ,while的用法是,當發生甚麼狀況時才執行後面,比較常見的是迴圈while i<10,只當i小於10之前都會迴圈執行,這邊的用法則是當下面是True得時候才會往下。所以當 try: .......... except:,try的用法是當try出現error的時候執行except,比較細節的可以設定error的錯誤刑事。
整體邏輯就是,先輸入日期,再把日期片切轉成西元,如果發生錯誤就重新輸入。

留言

這個網誌中的熱門文章

喵喵程式-原生python安裝與使用

喵喵程式-tkinter日期選擇器