web-dev-qa-db-ja.com

現在までの文字列の解析:不正なパターン文字「T」。

Javaでこれまでの文字列を解析する必要があります。私の文字列の形式は次のとおりです。

2014-09-17T12:00:44.0000000Z

しかし、Javaは、そのような形式を解析しようとすると、次の例外をスローします... Java.lang.IllegalArgumentException: Illegal pattern character 'T'

それを解析する方法について何かアイデアはありますか?

ありがとうございました!

11
mbezunartea

_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
_

タイムゾーンCESTtoString()はシステムタイムゾーンを使用)には異なるクロック時間が適切であり、結果は_UTC-time 12:00:44_と同等であることに注意してください。さらに、_100ns_までの精度を持つふりをする入力を正しく処理するために、7つの記号Sを挿入する必要がありました(ただし、Java pre 8はミリ秒しか処理できません)。

25
Meno Hochschild

'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");

回答の使用: この日付形式は何ですか?2011-08-12T20:17:46.384Z

12

これを試して。

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
    }
}
1