26
24

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Android と Java では SimpleDateFormat の書き方がこう違う

Last updated at Posted at 2015-02-16

みなさんご存じのとおり、 Android API と Java API は微妙に違います。

java.text.SimpleDateFormatも、違っているものの1つです。

タームゾーンや曜日などを指定するパターンが違います。
使えるパターンを使わないと例外が発生します。

Java6とJava7との間にも違いがあるので、抽出しておきました。*

|項目名|Java6|Java7|Android API**/***|
|:---|:---|:---|:---|:---|:---|
|タイムゾーン(-0800)(RFC 822)|Z|Z|Z, ZZ, ZZZ|
|タイムゾーン(-08, -0800, -08:00)(ISO 8601)|なし|X|ZZZZZ****|
|タイムゾーン(上記以外色々まとめて)|z|z|z, zz, zzz, zzzz, ZZZZ|
|曜日の番号(1 = 月曜、...、7 = 日曜)|なし|u|なし|
|曜日の名前(Tuesday)|E|E|EEEE|
|曜日の名前(Tue)|E|E|E, EE, EEE|
|曜日の名前(T)|なし|なし|EEEEE|
|月の名前(January)|M|M|MMMM|
|月の名前(Jan)|M|M|MMM|
|月の名前(J)|なし|なし|MMMMM|
|年(2015)|y|y|y, yyy, yyyy|
|年(15)|y|y|yy|
|暦週の基準年***** (2015, 15)|なし|Y|なし|

* ちなみにJava8ではjava.timeパッケージが追加されて日時の計算とか夏時間とかを扱うのが便利らしいので、ZonedDateTimeLocalDateTimeのparseメソッドにDateTimeFormatterを渡すことになって、SimpleDateFormatは徐々に使われなくなるかもしれません
** Android API level 9 以上にはLcというパターンが導入されています。たとえばロシア語のように、「N月M日」という日付が続いている場合の「N月」と、「N月」だけで独立して書かれる「N月」で表記が異なる言語への対応のためだそうです。Lは月、cは曜日です
*** Android API level 18 以上にはMMMMMというように同じ文字が5文字連続しているパターンが導入されたそうです。逆に言えばAPI level 18 未満ではそれらは使えなさそうです
**** ZZZZZでは厳密にはISO8601のすべてのパターンには対応していない模様です。たとえばタイムゾーンがプラスマイナス0、つまりUTCのときは2015-01-02 03:04:05ZというようにタイムゾーンとしてZが末尾につくことになりますが、これをパースすることができません
***** 「暦週の基準年」についての説明はここ(たぶん一生使わないだろうな……)

  • Java6 のSimpleDateFormatのjavadocはここ
  • Java7 のSimpleDateFormatのjavadocはここ
  • Android のSimpleDateFormatのjavadocはここ

です

上記の違いのせいで、Java API を参考にAndroidアプリを実装すると、パースに失敗することがあります。

26
24
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
26
24

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?