Javaでこれまでの文字列を解析する必要があります。私の文字列の形式は次のとおりです。
2014-09-17T12:00:44.0000000Z
しかし、Javaは、そのような形式を解析しようとすると、次の例外をスローします... Java.lang.IllegalArgumentException: Illegal pattern character 'T'
。
それを解析する方法について何かアイデアはありますか?
ありがとうございました!
_2014-09-17T12:00:44.0000000Z
_の入力を考えると、文字T
だけをエスケープするだけでは十分ではありません。末尾のZ
も処理する必要があります。ただし、このZ
はリテラルではなく、_UTC+00:00
_による_ISO-8601-standard
_タイムゾーンオフセットの意味があることに注意してください。したがって、Z
をエスケープすることは正しくありません。
SimpleDateFormat
は、この特別な文字Z
をパターンシンボルX
で処理します。したがって、最終的な解決策は次のようになります。
_ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSSSSSX");
Date d = sdf.parse("2014-09-17T12:00:44.0000000Z");
System.out.println(d); // output: Wed Sep 17 14:00:44 CEST 2014
_
タイムゾーンCEST
(toString()
はシステムタイムゾーンを使用)には異なるクロック時間が適切であり、結果は_UTC-time 12:00:44
_と同等であることに注意してください。さらに、_100ns
_までの精度を持つふりをする入力を正しく処理するために、7つの記号Sを挿入する必要がありました(ただし、Java pre 8はミリ秒しか処理できません)。
'T'文字をエスケープする必要があります。
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", Locale.US);
format.setTimeZone(TimeZone.getTimeZone("UTC"));
Date parse = format.parse("2014-09-17T12:00:44.0000000Z");
これを試して。
import Java.text.ParseException;
import Java.text.SimpleDateFormat;
import Java.util.Date;
public class DateClass {
public static void main(String[] args) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
Date d = sdf.parse("2014-09-17T12:00:44.0000000Z");
System.out.println(d); //output Wed Sep 17 12:00:44 IST 2014
}
}