Javaの最近のブログ記事

ISO-8601

ISO-8601 とは日付と時刻の国際規格であり、

例えば "2010-02-27T13:00:00+09:00" のようなフォーマットらしいです。

REST で結構使われているみたいです。

http://ja.wikipedia.org/wiki/ISO_8601

 

ISO-8601 形式の日付文字列を解析する方法は色々ありそうですが、

今回は Apache Common Lang 2.5 を使用してみました。

※ターゲットはAndroid 1.5 (API Level 3) の話です

 

Apache Common Lang

http://commons.apache.org/lang/

※同ページの Download now! をクリックすると最新版がダウンロードできます

 

サンプルソースコード

以下は "2010-02-27T13:00:00+09:00" を "2010年2月27日(土)13時00分" に変換するサンプルソースコードです。

※説明のために一部あえてパッケージ名+クラス名で書いています 

String srcString = "2010-02-27T13:00:00+09:00"; // 解析対象
FastDateFormat fastDateFormat =
    org.apache.commons.lang.time.DateFormatUtils.ISO_DATETIME_TIME_ZONE_FORMAT;
String patterns[] = { fastDateFormat.getPattern() };
try {
    Date dstDate = org.apache.commons.lang.time.DateUtils.parseDate(
            srcString, patterns);
    SimpleDateFormat dstDateFormat = new SimpleDateFormat(
        "yyyy年M月d日(EEE)HH時mm分");
    String dstString = dstDateFormat.format(dstDate);
    Log.v("Result", dstString); // 出力結果"2010年2月27日(土)13時00分"
} catch (ParseException e) {
}

 

ちなみに "2010-02-27T13:00:00+09:00" でなく "2010-02-27T13:00:00.000+09:00" の場合には、

android.text.format.Time#parse3339() を使用するとできるみたいです。

Twitter のフォロワーの方に教えていただきました。ありがたいことです。

※追記:最新のソースだとミリ秒があっても同APIでいけるかも(index19の処理)

http://android.git.kernel.org/?p=platform/frameworks/base.git;a=blobdiff;f=core/jni/android_text_format_Time.cpp;h=d89a7e68a9fd2cbedd6f44a8a2912036dbf22f63;hp=fde6ca6e2b2a18d3eca2e3b0454a0a50d1dc5073;hb=HEAD;hpb=9db3d07b9620b4269ab33f78604a36327e536ce1

 

あわせて読みたい

[Java] For-Eachループ

| トラックバック(0) |

For-Eachループ 

ArrayList<Integer> array = new ArrayList<Integer>();

のような配列の要素にアクセスする場合、

 

int length = array.size();
    
for (int i = 0; i < length; i++) {
    value = array.get(i);
}

の書き方で、配列の要素にアクセスすることができますが、

 

Java5(JDK1.5)で追加されたFor-Eachループでは、 

for (Integer value : array) {

}

と書くこともできます。

※Sunのドキュメントは、こちら(http://java.sun.com/j2se/1.5.0/ja/docs/ja/guide/language/foreach.html

 

後者の方が、読みやすく、安全ということみたいですが、処理時間はかかるみたいです。

実際に、Androidでコードを書いて計測してみると、
後者の方が、2~3倍処理時間がかかりました。

使用する場面に応じて使い分けるなど、留意した方が良さそうです。

Java言語の配列の書き方は、以下のとおり。

int[] a = {0, 1, 2};
int[] b = new int[] {0, 1, 2};
int[] c = new int[3];
c[0] = 0;
c[1] = 1;
c[2] = 2;

※色々な言語を行き来していると忘れてしまいます。。。現在、C++、AS3、Javaを並行して作業しているので・・・という言い訳。。。

1

2016年8月

  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31