2

時間文字列を正確な Date オブジェクト表現に変換するのに問題があります

私が通信しているサーバーは、このような UTC 時刻値を提供します。

2013-01-02T05:32:02.8358602Z

次のコードを試してみると、予想される UTC よりも約 2 時間 15 分進んでいるミリ秒カウントになります。

DateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS", Locale.getDefault());
inputFormat.setTimeZone(TimeZone.getTimeZone("UTC"));                   
Date date = inputFormat.parse("2013-01-02T05:32:02.8358602Z");

私は何を間違っていますか

4

2 に答える 2

0

問題は、SimpleDateFormat が 8358602 秒の何分の 1 かではなく、ミリ秒 = 8358602 ミリ秒の場合は数値になることです。デフォルトでは、SimpleDateFormat は「寛大な」モードになっています。これが 8358602 を受け入れる理由です。また、日フィールドで 99 を受け入れ、余分な日を月フィールドなどに移動します。厳密モードを SimpleDateFormat.setLenient(true) としてオンにすると、ミリ秒の最大値が 999 であるため、ParseException が発生します。

回避策を提供できます。日付は、小数秒を含む W3C XML スキーマ 1.0 の日付/時刻形式になります。この場合、javax.xml.datatype.XMLGregorianCalendar が必要です。これは機能します

DatatypeFactory dtf = DatatypeFactory.newInstance();
XMLGregorianCalendar c = dtf.newXMLGregorianCalendar("2013-01-02T05:32:02.8358602Z");
System.out.println(c.toGregorianCalendar().getTime());

とプリント

Wed Jan 02 07:32:02 EET 2013

EET は GMT+2 であることに注意してください

于 2013-01-02T06:51:43.273 に答える
-1

これを試して:

SimpleDateFormat format = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy");
Date d = format.parse(fileDate);

SimpleDateFormat()コンストラクターで正しい形式を指定する必要があります。

編集:

public String getconvertdate1(String date)
{
    DateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS");
    inputFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
    DateFormat outputFormat = new SimpleDateFormat("dd MMM yyyy");
    Date parsed = null; // should not be initialized first else current date will be printed in case of a parse exception
    try
    {
        parsed = inputFormat.parse(date);
    }
    catch (ParseException e)
    {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    String outputText = outputFormat.format(parsed);
    return outputText;
}

また、上記の方法でこの形式を試してください。EEE MMM dd HH:mm:ss zzz yyyy

于 2013-01-02T06:23:36.480 に答える