2008年6月8日日曜日

展覧会案内webサービスを作る(4)

Google AppEngineを使って展覧会案内葉書のデータベースサービスを作りますの続き

前回までに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 件のコメント: