Python標準庫 calendar 處理日期

2021-07-09 10:56:41 字數 2959 閱讀 7994

[python標準庫]calendar——處理日期

作用:calendar 模組實現了一些類來處理日期,管理面向年、月和周的值。

python 版本:1.4 版本,2.5 中做了更新

calendar 模組定義了 calendar 類,其中封裝了一些值的計算,如給定乙個月或一年中的週幾。另外,textcalendar 和 htmlcalendar 類可以生成經過預格式化的輸出。

格式化示例

prmonth() 方法是乙個簡單的函式,可以生成乙個月的格式化文字輸出。

import calendar

c = calendar.textcalendar(calendar.sunday)

c.prmonth(2011, 7)

這個例子按照美國的慣例,將 textcalendar 配置為一周從星期日開始。缺省會使用歐洲慣例,即一周從星期一開始。

利用 htmlcalendar 和 formatmonth() 可以生成乙個類似的 html **。顯示的輸出看起來與純文字的版本大致是一樣的,不過會用 html 標記包圍。各個表單元格有乙個類屬性對應星期幾,所以可以通過 css 指定 html 樣式。

要使用可用預設格式之外的某種格式生成輸出,可以使用 calendar 計算日期,並把這些值組織為周和月,然後迭代處理結果。對於這個任務,calendar 的 weekheader()、monthcalendar() 和 yeardays2calendar() 方法尤其有用。

呼叫 yeardays2calendar() 會生成乙個由「月欄」列表構成的序列。每個列表包含一些月,每個月是乙個周列表。週是元組列表,元組則由日編號(1~31)和星期幾(0~6)構成。當月以外的日編號為 0。

import calendar

import pprint

cal = calendar.calendar(calendar.sunday)

cal_data = cal.yeardays2calendar(2011, 3)

print 'len(cal_data) :', len(cal_data)

top_months = cal_data[0]

print 'len(top_months) :', len(top_months)

first_month = top_months[0]

print 'len(first_month) :', len(first_month)

print 'first_month:'

pprint.pprint(first_month)

呼叫 yeardays2calendar(2011, 3) 會返回 2011 年的資料,按每欄 3 個月組織。

這等價於 formatyear() 使用的資料。

import calendar

cal = calendar.textcalendar(calendar.sunday)

print cal.formatyear(2011, 2, 1, 1, 3)

day_name、day_abbr、month_name 和 month_abbr 模組屬性對於生成定製格式的輸出很有用(例如,在 html 輸出中包含鏈結)。這些屬性會針對當前本地化環境正確地自動配置。

計算日期

儘管 calendar 模組主要強調採用不同格式列印完整的日曆,它還提供了另外一些函式,對採用其他方式處理日期很有用,如為乙個重複事件計算日期。例如,python atlanta users group 每月的第二個星期四會召開一次會議。要計算一年中的會議日期,可以使用 monthcalendar() 的返回值。

import calendar

import pprint

pprint.pprint(calendar.monthcalendar(2011, 7))

有些日期的值為 0。這說明儘管這幾天屬於另乙個月,但與給定的當前月中的幾天同屬乙個星期。

一周中的第一天預設為星期一。可以通過呼叫 setfirstweekday() 改變這個設定,不過由於 calendar 模組包含一些常量來索引 monthcalendar() 返回的日期區間,所以在這種情況下跳過這一步會更方便。

要計算 2011 年的會議日期,假設是每個月的第二個星期四,0 值指示第一周的星期四是否包含在這個月內(或者不包含在這個月中,比如這個月從星期五開始)。

import calendar

# show every month

for month in range(1, 13):

# compute the dates for each week that overlaps the month

c = calendar.monthcalendar(2011, month)

first_week = c[0]

second_week = c[1]

third_week = c[2]

# if there is a thursday in the first week, the second thursday

# is in the second week. otherwise, the second thursday must

# be in the third week.

if first_week[calendar.thursday]:

meeting_date = second_week[calendar.thursday]

else:

meeting_date = third_week[calendar.thursday]

print '%3s: %2s' % (calendar.month_abbr[month], meeting_date)

python標準庫 時間庫

眾所皆知,每乙個程式語言都有自己的時間類庫,python也不例外用法十分簡單 最基本的類,time類 time基本函式介紹 import time print time.asctime 如果未傳入乙個tuple或乙個time struct就是使用當前的時間,返回乙個24字長的時間字串 就這個mon ...

python標準庫 os庫

os模組主要用於跟作業系統打交道 os模組常用的方法 os.getcwd 獲取當前工作目錄,即當前python指令碼工作的目錄路徑 os.chdir dirname 改變當前指令碼工作目錄 相當於shell下cd os.curdir 返回當前目錄 os.pardir 獲取當前目錄的父目錄字串名 os...

不屬於python標準庫 Python標準庫概覽

總結 這個部分講了一些常用的python庫的方法。一下子也記不住,不過基本都自己敲了 試了試。os模組 os模組介紹了一些作業系統級別的方法 os.getcwd 得到當前工作目錄 os.chdir 改變工作目錄 os.system mkdir haha 建立資料夾haha 字串正則匹配 匯入re模組...