前回までにPostCardデータベースを日付に合わせて表示できるようになったけど、説明を省いたところについて書いておく
htmlのリクエストクエリとして?kind=208-5-1の様に日付を指定した場合に、startdateにdateオブジェクトとして値をセットする処理
まず、日付処理をするために
import datetime
を追加した。こんなの追加しなくてもいいような気もする
今日の日付を取得する
today = datetime.datetime.today() + datetime.timedelta(hours=9)
today()メソッドで取得した日付は9時間づれているので、修正しておく。タイムゾーンの扱いについてドキュメントに記述があったけど、なんだか理解できなかったので、簡単に9時間足すだけにしといた
文字列オブジェクト(kind)からdateオブジェクトに変換する
try:
year,month,day = [int(num) for num in kind.split('-')]
startdate = datetime.datetime(year,month,day)
except:
startdate = today
kind=2008-6-7
と入っていたら'-'文字で分割してint()に変換してyear,month,dayオブジェクトを作る
datetimeオブジェクトをdatetime(year,month,day)で生成する
kindに無効な文字が入っていら例外が発生するのでtodayを代入すりる
enddateオブジェクトはspanクエリでstartdate基準で1日、1週間、1ヶ月後の日付を入れる
if span=='day':
enddate = startdate.date()
elif span=='week':
enddate = startdate.date() + datetime.timedelta(days=6)
elif span=='month':
enddate = startdate.date() + datetime.timedelta(days=calendar.monthrange(startdate.year,startdate.month)[1])
else:
enddate=None
htmlに"2008年6月1日~2008年6月7日"のような表示をするためにdatetimeオブジェクトから文字列に変換する
日本語表記にしたかったのでstrftime()メソッドは使わなかった
pagectrl=u'%d年%d月%d日~%d年%d月%d日の葉書 ' % ((startdate.timetuple()[:3]+enddate.timetuple()[:3]))次はデータ入力ページを作る
0 件のコメント:
コメントを投稿