Pypoomでの日付の扱い

投稿者: | 2007年12月26日

以下は、Pypoomを使って取得した日付データの取り扱いについての覚え書きである。
{:rn:}
{:rn:}Pypoomにより「仕事」のデータを取得するコードは以下のようになる。
{:rn:}
{:rn:}

{:rn:}#!/usr/bin/python{:rn:}# -*- coding: Shift-Jis -*-{:rn:}import pypoom{:rn:}{:rn:}app = pypoom.Application()     # instantiate the Application object {:rn:}tasks_folder = app.get_folder(pypoom.tasks)       # get the chosen Folder object{:rn:}{:rn:}for task in tasks_folder :       # Access items with regular python indexing, slicing and iteration operations{:rn:}    d=task.StartDate{:rn:}    s=task.Subject{:rn:}    print '%s, %s' % (s1,s2){:rn:}

{:rn:}
{:rn:}ここで、POOMにより取得できる日付データは、949998.0 とか 39804.0 とかわけわからん数字だ。
{:rn:}いろいろ調べてみて、たどり着いたのがこのページ [:右:]予定表エントリの最大/Minimum 日付
{:rn:}基準日からの日数だったのだ。納得。
{:rn:} 最大値 [:右:] 401768(2999/12/31)
{:rn:} 基準日 [:右:] 0(1899/12/30
{:rn:} 無指定 [:右:] 949998(4501/1/1)
{:rn:}
{:rn:}というわけで、取得したデータを日付に変換する必要があるわけだ。
{:rn:}たとえば、こうする。
{:rn:}
{:rn:}

{:rn:}import datetime{:rn:}(中略){:rn:}dmin = datetime.datetime(1899,12,30){:rn:}if d1 == 949998:{:rn:}    d2 = "None"{:rn:}else:{:rn:}    td = datetime.timedelta(days=d1){:rn:}    d2 = (dmin+td).strftime("%Y/%m/%d"){:rn:}(後略){:rn:}

{:rn:}
{:rn:}dmin基準日tdtimedelta により時間間隔(日数)を設定している。dmin+d1とすることで日付を求めている。さらに strftime により出力書式を指定している。
{:rn:}