Python 內建有不少時間相關的操作函數,本篇將如何取得日期區間記錄成 Python recipes ,以供方便使用。

這些方法主要使用 timedelta 進行時間加減、 calendar 取得月份天數以及其他 datetime 模組所提供之函數組合而成。

import calendar

from datetime import date
from datetime import time
from datetime import datetime
from datetime import timedelta

# 取得今天日期
today = date.today() # datetime.date(2014, 6, 2)

# 取得今天 0 時 0 分
datetime.combine(today, time.min) # dateime.date(2014, 6, 2, 0, 0)

# 取得今天 23 時 59 分 59 秒
datetime.combine(today, time.max) # datetime.datetime(2014, 6, 2, 23, 59, 59, 999999)

# 取得本月天數
days = calendar.monthrange(today.year, today.month)[1] # 30

# 取得本月最後 1 天日期
date(today.year, today.month, days) # datetime.date(2014, 6, 30)

# 取得本月 1 號
date(today.year, today.month, 1) #  datetime.date(2014, 6, 1)

# 取得上月第 1 天與最後 1 天
def previous_month_range():
    today = date.today()

    # number of days in previous month
    last_dt = today - timedelta(days=today.day)
    return (
        date(last_dt.year, last_dt.month, 1),
        date(last_dt.year, last_dt.month, last_dt.day)
    )

# 取得去年的今天
today - timedelta(days=365) # datetime.date(2013, 6, 2)

# 取得本週第 1 天與最後 1 天(Mon, Sun)
def current_week_range():
    today = date.today()
    y, m, d, dow = today.year, today.month, today.day, today.weekday()
    add_timedelta = timedelta(days=6-dow)
    sub_timedelta = timedelta(days=dow)
    return (today - sub_timedelta, today + add_timedelta)

參考資料:

https://docs.python.org/2/library/datetime.html

https://docs.python.org/2/library/calendar.html