SimpleDateFormatを使って、順調に日付を解析します。
2577 ワード
解析日付には解析できない異常がしばしば発生します。
java.text.PaseException:Uniparseable date:「Fri,02-Jan-2020 00:00 GMT」
解析日付のポイント:
1.下表と解析対象文字列を照らし合わせて、対応するpatternを書き出します。
文字
日付または時刻要素
表示
例
Text
Year
Month
Number
Number
Number
Number
Number
Text
Text
Number
Number
Number
Number
Number
Number
Number
General time zone
RFC 822 time zone
ここのターゲット文字列は「Fri,02-Jan-2020 00:00 GMT」です。
書き出したpattern=「EEE,dd-MM-yy HH:mm:ss z」
2.SimpleDateFormatを使って解析する
String dateStr=「Fri,02-Jan-2020 00:00 GMT」String pattern="EEE,dd-MM-yy HH:mm:ss z"DateFormat format=new SimpleDateFormat;log.info(format.parse);
悲劇はまた起こった。
java.text.PaseException:Uniparseable date:「Fri,02-Jan-2020 00:00 GMT」
at java.text.DateFormat.parse(DateFormat.java:337)
…
その後実験をしました。このpatternを使って、一つのdateオブジェクトに対してformatを行って結果を調べます。
Date d=new Date();DateFormat format=new SimpleDateFormat(「EEE,dd-MM-yy HH:mm:ss z」);log.info(format.format(d));
出力結果:火曜日、28-9月-2010 15:12:05 CST
はっと悟りました。正しいLocaleを設置しなければならないようです。
アプリを見ると、SimpleDateFormatの中にもう一つの重荷重の構造があるということが分かります。
前のコードを改良すれば、スムーズに解析できます。
String dateStr=「Fri,02-Jan-2020 00:00 GMT」String pattern="EEE,dd-MM-yy HH:mm:ss z"DateFormat format=new SimpleDateFormat(pattern,Locale.US)log.info(format.parse);log.info(format)
出力結果:Thu Jan 02 08:00 CST 2020
このように類推して、他のフォーマットもこのように解析できます。鍵はpatternが必ず正しいということです。また、正しいLocaleを設定します。
java.text.PaseException:Uniparseable date:「Fri,02-Jan-2020 00:00 GMT」
解析日付のポイント:
1.下表と解析対象文字列を照らし合わせて、対応するpatternを書き出します。
文字
日付または時刻要素
表示
例
G
ErraフラグText
AD
y
年Year
1996
; 96
M
年内の月Month
July
; Jul
; 07
w
年内の周数Number
27
W
月の中の週数Number
2
D
年間の日数Number
189
d
月の日数Number
10
F
月の中の週Number
2
E
曜日Text
Tuesday
; Tue
a
Am/pmタグText
PM
H
一日の時間数(0-23)Number
0
k
一日の時間数(1-24)Number
24
K
am/pmの時間数(0-11)Number
0
h
am/pmの時間数(1-12)Number
12
m
時間の中の分Number
30
s
分の秒数Number
55
S
ミリ秒Number
978
z
タイムゾーンGeneral time zone
Pacific Standard Time
; PST
; GMT-08:00
Z
タイムゾーンRFC 822 time zone
-0800
ここのターゲット文字列は「Fri,02-Jan-2020 00:00 GMT」です。
書き出したpattern=「EEE,dd-MM-yy HH:mm:ss z」
2.SimpleDateFormatを使って解析する
String dateStr=「Fri,02-Jan-2020 00:00 GMT」String pattern="EEE,dd-MM-yy HH:mm:ss z"DateFormat format=new SimpleDateFormat;log.info(format.parse);
悲劇はまた起こった。
java.text.PaseException:Uniparseable date:「Fri,02-Jan-2020 00:00 GMT」
at java.text.DateFormat.parse(DateFormat.java:337)
…
その後実験をしました。このpatternを使って、一つのdateオブジェクトに対してformatを行って結果を調べます。
Date d=new Date();DateFormat format=new SimpleDateFormat(「EEE,dd-MM-yy HH:mm:ss z」);log.info(format.format(d));
出力結果:火曜日、28-9月-2010 15:12:05 CST
はっと悟りました。正しいLocaleを設置しなければならないようです。
アプリを見ると、SimpleDateFormatの中にもう一つの重荷重の構造があるということが分かります。
SimpleDateFormat(String pattern, Locale locale)
与えられたモードと所定の言語環境の標準日付書式記号で構成されています。 SimpleDateFormat
前のコードを改良すれば、スムーズに解析できます。
String dateStr=「Fri,02-Jan-2020 00:00 GMT」String pattern="EEE,dd-MM-yy HH:mm:ss z"DateFormat format=new SimpleDateFormat(pattern,Locale.US)log.info(format.parse);log.info(format)
出力結果:Thu Jan 02 08:00 CST 2020
このように類推して、他のフォーマットもこのように解析できます。鍵はpatternが必ず正しいということです。また、正しいLocaleを設定します。