ホーム  > ブログ一覧  > 名残雪

ブログ

名残雪

2020.02.18


夜寝てるときに足が冷たいなと思ったら、冬なのを急に思い出したかの
ような雪が降っていました。道路の積雪はほぼなかったのですが出勤前は
少し焦りました。今年の冬は暖冬という印象そのものでしたから急な
変化があると体も気持ちもびっくりしてしまいます。

 

先週Trelloを社内で使ってるという話をしましたが、いろいろと使ってる
うちに単体では機能不足だったり不便だったりする部分が気になって
きます。そこは基本的には商用ソフトですから機能拡張したかったら
有料プランの契約とPower-Upをお使いください、というのはすごく
当然な話なのですが、WebAPIが充実してるのでつい自分でなんとかして
やりたくなります。

 

TrelloをAPI経由で利用する場合カードの日時情報のやり取りを正しく
行わなくてはなりません。Trelloは世界中どこからでも使えるサービス
であるため、日時はUTC基準になっています。日本はこのUTCから+9時間
ずれたタイムゾーン(JST)にあるので、Trelloに書き込むときは日本の
ローカルタイムから9時間を引き、Trelloから読みだすときは9時間を
足してローカルタイムにしてやる必要があります。

 

社内用のプログラムは当然日本でしか使用しないのでこのタイムゾーンを
JST=9時間と決め打ちで全く問題はないのですが、ライブラリ化する時に
自動で「現在地とUTCの時間差」を設定したいと思いいろいろ試して
たんですが、これどうやるのがスマートな方法なのかよくわかりません。

 

datetime.now() – datetime.utcnow()
もっとも単純でわかりやすいのですが少々問題があります。実用レベルでは
問題ない値が求まりますが、二つの関数実行の間にわずかながら必ず
時間差が発生するためプログラム的には美しくありません。

 

datetime.astimezone(datetime.now()).utcoffset()
わざとnativeな日時情報(now()である必要はありません)を渡す
ことによってタイムゾーン情報とそこから時刻差を求める方法です。
シンプルなんでこれでいいやと思ったらなんとPython3.5以下ではawareの
日時情報しか受けつけません。3.6になるときに仕様が変わったようです。

 

-datetime.timedelta(seconds = time.timezone)
結局この形で落ち着いたんですが、time.timezoneがintでの秒数
-32400を返すのが少々わかりにくい気もします。

 

プログラムは正しく動いてなんぼ。動けばそれでいいと言ってしまえば
それで終わりなんですが(上記の部分なんてどのパターンでも結果は
同じなので)もっといい書き方があるような部分があると気になってしまいます。

 

明日以降はまた天気も回復するようですね。本当に名残雪になってほしいものです。

ページトップへ