今天在實現CnblogsFan項目的過濾選項對話框中需要建立兩組下拉選單用來讓用戶選擇需要采集的日期范圍。 這樣我就可以得到一個xxxx年 xx月 xx日格式的字符串, 我們知道, 年份和月份都是固定的, 唯有每月的天數是不固定的, 不僅要考慮的每月的天數, 還要考慮這一年是不是閏年, 當然, 如果我們自己實現通過年份和月份計算這個月的天數也很容易。
在剛剛接觸編程的時候, 通常的做法就是通過一個數組, 里面的元素是每個月的月數, 然后判斷這個年份是不是閏年, 再進行相應的月份輸出, 不過筆者今天又懶了一會, 不想自己實現, 想找找看Python有沒有實現好的方法給我們調用, 還真找到了個, 這里就不繞彎子了, 直接說這個稍微有點另類的方法。
time模塊中有個time.strptime方法, strptim方法的作用就是按照特定時間格式將字符串轉換為時間類型。 筆者嘗試了下, 當將一個日期不正確的字符串轉化為時間類型時Python就會報錯 , 比如, 我們嘗試將"2012-2-31"這個字符串進行轉化時就會出錯, 這是因為2月是沒有31天的, 這真是太棒了! 我們就利用這點來實現求每個月有多少天, 看下代碼:
import time def getDays( year, month ): day = 31 #定義每月最多的天數 while day: try: time.strptime( '%s-%s-%d'%( year, month, day ), '%Y-%m-%d' ) #嘗試將這個月最大的天數的字符串進行轉化 return day #成功時返回得就是這個月的天數 except: day -= 1 #否則將天數減1繼續嘗試轉化, 直到成功為止 print getDays( 2006, 2 )
getDays函數傳入的就是年份和月份了, 返回值就是該月份的天數, 感覺還是挺好用的。