Androidアプリで日時を扱うことが多くなってきました。少し前に「AndroidでHTTPレスポンスヘッダのLast-Modifiedの値を取得する」という記事を書きました。
RFC 2616ではHTTPレスポンスヘッダーに含まれているDateやLast-Modifiedの日付はRFC 1123フォーマットで表現しますよと書かれています。ですのでHTTPレスポンスヘッダーの日時をパースするためだけに前回の記事ではRFC 1123フォーマットに限定したものでした。
日時文字列をフォーマットを指定してDate型へパースしたいので、下記のようなメソッドを作成しました。
package jp.ch3cooh.sample.utility; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.GregorianCalendar; import java.util.Locale; import java.util.TimeZone; public class DateUtils { public static Date fromString(String format, String string) throws ParseException { SimpleDateFormat dateFormatter = new SimpleDateFormat(format, Locale.US); dateFormatter.setTimeZone(TimeZone.getTimeZone("GMT")); dateFormatter.setCalendar(new GregorianCalendar()); return dateFormatter.parse(string); } }
この DateUtils.fromString メソッドを使ってみましょう。
ISO 8601の場合
日付の表し方といえば一般的にISO 8601のような気がします。Wikipediaにも載っているISO 8601形式の時刻表記例としては下記の通りです。
- 基本形式
- 20150701T035640+0900
- 拡張形式
- 2015-07-01T03:56:40+09:00
DateUtils.fromStringメソッドを使ってパースするには下記のように書きます。
String stringISO8601 = "2015-06-30T10:00:00+09:00"; Date dateISO8601 = DateUtils.fromString(stringISO8601, "yyyy-MM-dd'T'HH:mm:ssZ");
RFC 1123の場合
前述したようにHTTPレスポンスヘッダーに含まれる日付をパースするときに使用しました。「AndroidでHTTPレスポンスヘッダのLast-Modifiedの値を取得する」に詳細を書いています。
DateUtils.fromStringメソッドを使ってパースするには下記のように書きます。
String stringRFC1123 = "Fri, 26 Jun 2015 06:16:45 GMT"; Date dateRFC1123 = DateUtils.fromString(stringRFC1123, "EEE',' dd MMM yyyy HH:mm:ss zzz");