[英]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)
您可以將字符串20160421095058613
為20160421095058613
和000
。 然后,您檢查第一個字符串是否有效(使用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類使用納秒級的分辨率,最多可使用九位數的十進制小數秒。 對於您的六位數微秒而言,已經綽綽有余了。
有關格式化模式代碼,請參見DateTimeFormatter
類。 與舊的SimpleDateFormat
代碼非常相似,但不完全相同。
輸入時解析為LocalDateTime
缺少有關UTC偏移量或時區的任何信息。
如果從上下文中知道了預期的偏移量或區域,則將其應用於產生OffsetDateTime
或ZonedDateTime
對象。
要與尚未更新為java.time類型的舊代碼進行互操作,可以通過在舊類上調用新方法進行轉換。 注意,從java.time到舊類型可能會導致數據丟失,因為任何微秒或納秒都將被截斷為毫秒。
所有這些問題在其他問答中均已多次討論。 搜索堆棧溢出以獲取更多信息和示例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.