2010年11月1日月曜日

Buzzの日付書式のフォーマットパターンをTimeクラスのparse3339()を使って簡単にパースする

Google Buzz APIで結果を取得したときの日付書式「2010-10-15T06:51:04.000Z」を、SimpleDateFormatクラスを使って解析する方法について以前書いたが、android.text.format.Timeクラスのparse3339()を使うと、もっと簡単に解析できることが分かった。

public class Message {

 private static java.text.DateFormat FORMAT_DATE;
 private static java.text.DateFormat FORMAT_TIME;
 private Time published;

 public Message(java.text.DateFormat df, java.text.DateFormat tf) {
  FORMAT_DATE = df;
  FORMAT_TIME = tf;
  published = new Time();
 }

 public void setPublished(String published) {
  try {
   this.published.parse3339(published.trim());
  } catch (TimeFormatException e) {
   throw new RuntimeException(e);
  }
 }

 public String getPublished() {
  Date date = new Date(published.normalize(true));
  return FORMAT_DATE.format(date) + " " + FORMAT_TIME.format(date);
 }

RFC3339については、以下にドキュメントがある。
RFC3339 - Date and Time on the Internet: Timestamps


コンストラクタの引数のjava.text.DateFormatで、端末側で選択されているロケール・書式に則った、日付と時間の書式を渡している。これによって、ユーザが設定している書式に則って、日付と時間をフォーマットしている。

Message message = new Message(android.text.format.DateFormat.getDateFormat(context), android.text.format.DateFormat.getTimeFormat(context));