カレンダーを作る
calendarモジュールを使います。
calendar.calendarやcalendar.monthはテキストで整形して出力します。
import calendar print calendar.month(2008, 1)
January 2008 Mo Tu We Th Fr Sa Su 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
もしHTMLやPDFなど自前で加工して出力したい場合、加工する元のデータとして日付を並べたリストが得られるmonthcalendarを使うのが便利です。
print calendar.monthcalendar(2008, 1)
[ [0, 1, 2, 3, 4, 5, 6], [7, 8, 9, 10, 11, 12, 13], [14, 15, 16, 17, 18, 19, 20], [21, 22, 23, 24, 25, 26, 27], [28, 29, 30, 31, 0, 0, 0] ]
デフォルトでは最左列が月曜になっています。最左列を日曜にしたい場合はsetfirstweekdayを使います。
calendar.setfirstweekday(calendar.SUNDAY) print calendar.month(2008, 1) print calendar.monthcalendar(2008, 1)
January 2008 Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 [ [0, 0, 1, 2, 3, 4, 5], [6, 7, 8, 9, 10, 11, 12], [13, 14, 15, 16, 17, 18, 19], [20, 21, 22, 23, 24, 25, 26], [27, 28, 29, 30, 31, 0, 0] ]
追記
Python 2.5からCalendar、TextCalendar、HTMLCalendar、LocaleTextCalendar、LocaleHTMLCalendarといったクラスが使えます。自前コードを書かなくてもシンプルなHTMLカレンダーが出力できます。
とりあえずテキスト版の月カレンダーをクラスで書いてみます。
import calendar tc = calendar.TextCalendar(calendar.SUNDAY) print tc.formatmonth(2008, 1) c = calendar.Calendar(calendar.SUNDAY) print c.monthdayscalendar(2008, 1)
January 2008 Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 [ [0, 0, 1, 2, 3, 4, 5], [6, 7, 8, 9, 10, 11, 12], [13, 14, 15, 16, 17, 18, 19], [20, 21, 22, 23, 24, 25, 26], [27, 28, 29, 30, 31, 0, 0] ]
LocaleHTMLCalendarで日本語の月カレンダーを出してみるとこんな感じになります。
## Windowsであれば「ja」で日本語ロケールを指定 ## システムによって「ja_JP.UTF-8」などのロケール指定が使えます c = calendar.LocaleHTMLCalendar(calendar.SUNDAY, locale='ja') print c.formatmonth(2008, 1)
<table border="0" cellpadding="0" cellspacing="0" class="month"> <tr><th colspan="7" class="month">1月 2008</th></tr> <tr><th class="sun">日</th><th class="mon">月</th><th class="tue">火</th><th class="wed">水</th><th class="thu">木</th><th class="fri">金</th><th class="sat">土</th></tr> <tr><td class="noday"> </td><td class="noday"> </td><td class="tue">1</td><td class="wed">2</td><td class="thu">3</td><td class="fri">4</td><td class="sat">5</td></tr> <tr><td class="sun">6</td><td class="mon">7</td><td class="tue">8</td><td class="wed">9</td><td class="thu">10</td><td class="fri">11</td><td class="sat">12</td></tr> <tr><td class="sun">13</td><td class="mon">14</td><td class="tue">15</td><td class="wed">16</td><td class="thu">17</td><td class="fri">18</td><td class="sat">19</td></tr> <tr><td class="sun">20</td><td class="mon">21</td><td class="tue">22</td><td class="wed">23</td><td class="thu">24</td><td class="fri">25</td><td class="sat">26</td></tr> <tr><td class="sun">27</td><td class="mon">28</td><td class="tue">29</td><td class="wed">30</td><td class="thu">31</td><td class="noday"> </td><td class="noday"> </td></tr> </table>