- blogs:
- cles::blog
2012/01/17

Javaで ISO 8601形式の入出力を実装する


Java で ISO 8601 形式の日付の入出力を作る必要があったのでメモ。Java6 の SimpleDateFormat では ISO 8601 のタイムゾーンの表現できないのに加えて、マルチスレッド対応でないというハマりポイントもある*1らしいので、大人しくapache-commons-langに頼ることにします。ちなみに Java7 のSimpleDateFormat には "X" というフォーマット文字列が追加されているので、これを使えばいけそうではあるんですけどね。
以下、作業メモ。
† サンプルコード
作ってみたコードはこんな感じ。
GMTを表すZの処理が微妙な感じですが、とりあえずこれで使えそうな感じです。
ISO8601Example.java
import java.text.ParseException;
import java.util.Date;
import org.apache.commons.lang3.time.DateFormatUtils;
import org.apache.commons.lang3.time.DateUtils;
public class ISO8601Example {
@SuppressWarnings("deprecation")
public static void main(String[] args) {
String str = "2012-01-23T12:34:56+09:00";
System.out.println("Before:"+str);
System.out.println("After(Local):"+parseDate(str));
System.out.println("After(GMT):"+parseDate(str).toGMTString());
System.out.println();
str = "2012-01-23T12:34:56+00:00";
System.out.println("Before:"+str);
System.out.println("After(Local):"+parseDate(str));
System.out.println("After(GMT):"+parseDate(str).toGMTString());
System.out.println();
str = "2012-01-23T12:34:56Z";
System.out.println("Before:"+str);
System.out.println("After(Local):"+parseDate(str));
System.out.println("After(GMT):"+parseDate(str).toGMTString());
}
public static String toISO8601(Date date){
return DateFormatUtils.ISO_DATE_TIME_ZONE_FORMAT.format(date);
}
public static Date parseDate(String dateString){
Date date = null;
try {
date = DateUtils.parseDate(dateString, DateFormatUtils.ISO_DATETIME_TIME_ZONE_FORMAT.getPattern() );
} catch (ParseException e) {
try {
date = DateUtils.parseDateStrictly(dateString, DateFormatUtils.ISO_DATETIME_FORMAT.getPattern()+"'Z'");
date = DateUtils.addHours(date, 9);
} catch (ParseException e1) {
e1.printStackTrace();
}
}
return date;
}
}
実行結果はこんな感じ。
Before:2012-01-23T12:34:56+09:00
After(Local):Mon Jan 23 12:34:56 JST 2012
After(GMT):23 Jan 2012 03:34:56 GMT
Before:2012-01-23T12:34:56+00:00
After(Local):Mon Jan 23 21:34:56 JST 2012
After(GMT):23 Jan 2012 12:34:56 GMT
Before:2012-01-23T12:34:56Z
After(Local):Mon Jan 23 21:34:56 JST 2012
After(GMT):23 Jan 2012 12:34:56 GMT
† 参考
・JavaでのISO 8601形式の日時の処理 - drambuieの日記
・Java で ISO-601 の日付文字列を parse する | 裏表(Phinloda のもう裏だか表だか分からないページ)
トラックバックについて
Trackback URL:
お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/4712
Trackbacks
このエントリにトラックバックはありません
Comments
愛のあるツッコミをお気軽にどうぞ。[policy]
古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
コメントはありません
Comments Form
コメントは承認後の表示となります。
OpenIDでログインすると、即時に公開されます。
OpenID を使ってログインすることができます。
サイト内検索
検索ワードランキング
へぇが多いエントリ
閲覧数が多いエントリ
1 . アーロンチェアのポスチャーフィットを修理(112051)
2 . 福岡銀がデマの投稿者への刑事告訴を検討中(110680)
3 . 年次の人間ドックへ(110305)
4 . 2023 年分の確定申告完了!(1つめ)(109854)
5 . 三菱鉛筆がラミーを買収(109751)
2 . 福岡銀がデマの投稿者への刑事告訴を検討中(110680)
3 . 年次の人間ドックへ(110305)
4 . 2023 年分の確定申告完了!(1つめ)(109854)
5 . 三菱鉛筆がラミーを買収(109751)
cles::blogについて
Referrers