2014/09/27

Python 日期時間運用

  開始認真學起Python這個強大的script language ,因為它可以幫我運用在許多方面,像是Blender / Panda3D / Web scraping 等等。拿來運用時就想到以前在用 Java 時都用建立一套日期及時間的 utility library , 現在語言換了,應該也要先熟悉它如何處理日期及時間,以下整理自己常用的用法:

from datetime import date, time,datetime

# 取得今天日期
today = date.today()

# 日期 減一天
dt = today.replace(day=today.day-1)
print dt.year,dt.month,dt.day
# 月份 加一個月
dt = today.replace(month=today.month+1)
print dt.year,dt.month,dt.day
# 年份 加一年
dt = today.replace(year=today.year+1)
print dt.year,dt.month,dt.day
# 年/月/日 各減一
dt = today.replace(year=today.year-1, month=today.month-1, day=today.day-1)
print dt.year,dt.month,dt.day

以上這個年/月/日加減是有問題, 特別是當該日期為某月第1天時, 使用 day=today.day - 1 會出現以下 exception :

 >>> yesterday = date.today().replace(day=today.day-1)

Traceback (most recent call last):
  File "", line 1, in
    yesterday = date.today().replace(day=today.day-1)
ValueError: day is out of range for month


這時候該使用 timedelta , 請看以下示範:

>>> from datetime import date, datetime, timedelta
>>> tomorrow = datetime.now().date() + timedelta(days=1)
>>> print tomorrow
2014-10-02
>>> print datetime.now().date()
2014-10-01
>>> yesterday = datetime.now().date() + timedelta(days=-1)
>>> print yesterday
2014-09-30



# 輸出格式變化
print dt.strftime("%y%m%d")
print dt.strftime("%y/%m/%d")
# 年份為四位西元年 %Y
print dt.strftime("%Y%m%d")
print dt.strftime("%Y/%m/%d")
print dt.isoformat()

# 取得現在日期時間
now = datetime.now()
print now
# 印出現在的 時:分:秒
print now.strftime("%H:%M%S")
# 印出現在的 西元年月日 YYYYMMDD
print now.strftime("%Y%m%d")


前半部日期的加減是個人覺得很實用的一部份,可以用來一天天推移。從這些程式碼片斷可以看出來Python簡單卻很有威力的地方。換成其它語言可能要寫一堆程式碼才能達成相同的功能。