[英]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.