簡體   English   中英

Java:無法解析的日期異常錯誤

[英]Java: unparseable date exception error

我無法解析迄今為止的字符串

public class Main {
    public static void main(String s[])
    {
        SimpleDateFormat mdyFormat1 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm.ss.SSSZ");
        String date="2015-08-27T11:46:35.336Z";

        try {
            Date date1=mdyFormat1.parse(date);
            System.out.println(date1);
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
}

出錯

java.text.ParseException: Unparseable date: "2015-08-27T11:46:35.336Z"
    at java.text.DateFormat.parse(Unknown Source)
    at com.connectm.onprocess.logincontroller.Main.main(Main.java:14)

你有兩個問題:

  1. 2015-08-27T11:46:35.336Z ,46 到 35 之間的冒號 ( 2015-08-27T11:46:35.336Z應該是 。 (點)。 new SimpleDateFormat("yyyy-MM-dd'T'HH:mm.ss.SSSZ")格式new SimpleDateFormat("yyyy-MM-dd'T'HH:mm.ss.SSSZ") 所以它應該是2015-08-27T11:46.35.336Z 而 Z 是下一個問題。
  2. 並且字符串末尾的 Z 也是錯誤的,它應該類似於“2015-08-27T11:46.35.336-0800”以使其工作。 但是如果你還是不明白Z部分請參考文檔http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html#rfc822timezone

注意mdyFormat1對象初始化從

new SimpleDateFormat("yyyy-MM-dd'T'HH:mm.ss.SSSZ");

new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");

public static void main(String[] args) {
    SimpleDateFormat mdyFormat1 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
    String date="2015-08-27T11:46:35.336Z";

    try {
        Date date1=mdyFormat1.parse(date);
        System.out.println(date1);
    } catch (ParseException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

輸出:

2015 年 8 月 27 日星期四 11:46:35 CDT

正如其他人指出的那樣,您的格式模式無法匹配您的輸入數據。

時間

此外,您正在使用舊的過時類,這些類已被證明是麻煩、混亂和有缺陷的。 在 Java 8 及更高版本中,它們已被新內置的 java.time 框架所取代。

您的輸入數據采用標准 ISO 8601 格式。 該格式在 java.time 中默認用於解析和生成日期時間值的字符串表示。 因此,無需指定格式化程序。

Instant instant = Instant.parse( "2015-08-27T11:46:35.336Z" );
String output = instant.toString();

如果需要,您可以指定時區。

ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM