以下は、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 は基準日、tdは timedelta により時間間隔(日数)を設定している。dmin+d1とすることで日付を求めている。さらに strftime により出力書式を指定している。
{:rn:}