Hatena::Groupnadesiko

そっとなでしこ RSSフィード


メインのブログに書くまでもない、なでしこ学習帳【記事一覧】 【このブログは何?】


特設!→【目次】なでしこ用Twitter 連携ライブラリ「なこったー」で遊ぶ


2010-09-01

twitter APIで使われる英文形式の日時を日本時間に変換

| twitter APIで使われる英文形式の日時を日本時間に変換 - そっとなでしこ を含むブックマーク はてなブックマーク - twitter APIで使われる英文形式の日時を日本時間に変換 - そっとなでしこ

 これは、日本語プログラミング言語「なでしこ」用Twitter 連携ライブラリ「なこったーに限った話ではないのですが、Twitter APIで使われるツイート投稿日時(create_at)データは非常に扱い辛いです。

 例えば、こんな形式です。

Tue Aug 31 23:54:46 +0000 2010

 これは見づらい。色々と頭の中で変換しなければなりません。すなわち…

  • 英文形式(何月なのか、頭の中で英和辞典が起動…)
  • 協定世界時(日本時間は+9時間。場合によっては日付が+1日される)

 また、なでしこのプログラムでも扱い辛い。すなわち…

  • 英文形式を日時に変換する処理(StrToTimeみたいな)は、なでしこでは用意されていない
  • 日時に時間を加算して必要なら日付変更を行う処理は、なでしこでは用意されていない

つまり、上の例を

2010/09/01(水) 08:54:46

と、変換するような処理は、自分でゴリゴリと書いて用意する必要があります。

 実は、そのような処理を以前に書いています。

 けっこう長々としたソースコードなので、当該処理のみを抜き出したサンプルコードを書いてみました。

■ソースコード

変換対象日時は、「Tue Aug 31 23:54:46 +0000 2010」。

変換対象日時をTwitter英文形式_日時変換。
「変換前:{変換対象日時}{~}変換後:{それ}」をメモ記入。

#-----------------------------------------------------------------------
# 関数定義
#-----------------------------------------------------------------------
●Twitter英文形式_日時変換(対象を)
 英語月@「Jan」=「01」
 英語月@「Feb」=「02」
 英語月@「Mar」=「03」
 英語月@「Apr」=「04」
 英語月@「May」=「05」
 英語月@「Jun」=「06」
 英語月@「Jul」=「07」
 英語月@「Aug」=「08」
 英語月@「Sep」=「09」
 英語月@「Oct」=「10」
 英語月@「Nov」=「11」
 英語月@「Dec」=「12」
 取得日時は対象を「 」で区切る。
 英語月@「{取得日時[1]}」を取得月に代入する。
 取得JST日付は「{取得日時[5]}/{取得月}/{取得日時[2]}」。
 地域標準時変換(取得JST日付、取得日時[3]、「+」、「09:00:00」)。
 それで戻る。

●地域標準時変換(UTC日付、UTC時刻、加減算演算子、加減算時間)~
 加減算日数は0。
 地域標準時刻は、UTC時刻に「{加減算演算子}{加減算時間}」を時間加算。
 UTC時刻を「:」で区切り、UTC時刻配列に代入。
 加減算時間を「:」で区切り、加減算時間配列に代入。
 もし、加減算演算子が「+」ならば
  秒換算は((UTC時刻配列[0]×60×60)+(UTC時刻配列[1]×60)+(UTC時刻配列[2]))+
  ((加減算時間配列[0]×60×60)+(加減算時間配列[1]×60)+(加減算時間配列[2]))
  もし、秒換算が(24×60×60)以上ならば
   加減算日数は1。
  違えば
  秒換算は((UTC時刻配列[0]×60×60)+(UTC時刻配列[1]×60)+(UTC時刻配列[2]))-
  ((加減算時間配列[0]×60×60)+(加減算時間配列[1]×60)+(加減算時間配列[2]))
  もし、秒換算が0未満ならば
   加減算日数は1。
 地域標準日時は、UTC日付に「{加減算演算子}0/0/{加減算日数}」を日付加算。
 「{地域標準日時}({地域標準日時の曜日}) {地域標準時刻}」で戻る。

単純な処理なのに、ソースコードが無駄に長い…orz

 いつか「なこったー」ライブラリーに、twitterの投稿日時をもっと楽々と取得できる関数が追加されるとイイなぁ…