簡體   English   中英

SimpleDateFormat解析日期字符串不正確

[英]SimpleDateFormat parsing date string incorrectly

我正在嘗試將字符串解析為日期,然后將該日期格式化為其他字符串格式以進行輸出。

我的日期格式代碼如下:

SimpleDateFormat dateFormatter = new SimpleDateFormat("dd/MM/yyyy");
SimpleDateFormat dateParser = new SimpleDateFormat("d/M/yyyy h:m:s a");
String formattedDocumentDate = dateFormatter.format(dateParser.parse(sysObj.getString("document_date")));

sysObj.getString("document_date")的結果是sysObj.getString("document_date") 1/31/2013 12:00:01 AM 當我檢查formattedDocumentDate的值時,得到01/07/2015

任何幫助深表感謝。

您將第31天解析為月份。 SimpleDateFormat嘗試為您提供有效日期。 因此,它增加了1/0/2013 31個月 這是2年7個月。 這樣您就可以得到結果01/01/2015 因此, SimpleDateFormat可以正常工作。

一種解決方案是將日期格式更改為M/d/yyyy h:m:sa或輸入數據。

為避免這些嘗試,您必須關閉SimpleDateFormat寬松模式。 如果格式不合適,您將獲得一個例外。

看來您的輸入格式實際上是先幾個月,然后是幾天。 因此應為“ MM / dd / yyyy”。 所以:

SimpleDateFormat dateFormatter = new SimpleDateFormat("dd/M/yyyy");
SimpleDateFormat dateParser = new SimpleDateFormat("MM/dd/yyyy hh:mm:ss a");
String formattedDocumentDate = dateFormatter.format(dateParser.parse(sysObj.getString("document_date")));

這樣的另一個例子

SimpleDateFormat sdfInput = new SimpleDateFormat("yyyyMMdd");
System.out.println("date is:"+new java.sql.Date( sdfInput.parse("20164129").getTime() ));

輸出是: 2019-05-29

我希望引發解析異常,但(41)不是有效的月份值。 另一方面,如果我給出了20170229 ,系統可以識別出2017年2月沒有圈數,並返回有趣的2017-03-01

暫無
暫無

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

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