簡體   English   中英

使用SimpleDateFormat和其他字符在Java中解析日期

[英]Parse a date in java using SimpleDateFormat with additional characters

我有以下日期:

String data = "20160421095058613000";

我想使用SimpleDateFormat檢查這是否是有效日期。 我想要的模式是: "yyyymmddhhmmssSSS"問題是我不知道如何在該模式中在日期末尾添加這三個零。 我試過了:

try {
        Date date = new SimpleDateFormat("yyyymmddhhmmssSSS000").parse(data);
            System.out.println(date);

        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

但是我得到:

java.text.ParseException: Unparseable date: "20160421095058613000"
    at java.text.DateFormat.parse(DateFormat.java:377)
    at testare.main(testare.java:11)

您可以將字符串2016042109505861320160421095058613000 然后,您檢查第一個字符串是否有效(使用SimpleDateFormat),然后僅檢查后三個字符是否為零。

try {
            String data = "20160421095058613000";
            Date date = new SimpleDateFormat("yyyyMMddhhmmssSSS").parse(data.substring(0, 17));
                System.out.println(date);

            } catch (ParseException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

微秒

大概那些最后的數字代表微秒。 舊的舊式日期時間類只能處理毫秒。

換句話說,最后六個數字代表一秒的分數。

提示:如果對此數據源有任何影響,則在將日期時間值序列化為文本時,請更改為使用標准ISO 8601格式。

java.time

您應該在java.time包中使用現代的日期時間類。

java.time類使用納秒級的分辨率,最多可使用九位數的十進制小數秒。 對於您的六位數微秒而言,已經綽綽有余了。

有關格式化模式代碼,請參見DateTimeFormatter類。 與舊的SimpleDateFormat代碼非常相似,但不完全相同。

輸入時解析為LocalDateTime缺少有關UTC偏移量或時區的任何信息。

如果從上下文中知道了預期的偏移量或區域,則將其應用於產生OffsetDateTimeZonedDateTime對象。

要與尚未更新為java.time類型的舊代碼進行互操作,可以通過在舊類上調用新方法進行轉換。 注意,從java.time到舊類型可能會導致數據丟失,因為任何微秒或納秒都將被截斷為毫秒。

所有這些問題在其他問答中均已多次討論。 搜索堆棧溢出以獲取更多信息和示例。

暫無
暫無

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

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