簡體   English   中英

格式yyyyMMddhhmmss的Java字符串到日期的轉換錯誤

[英]Java String to date conversion error for format yyyyMMddhhmmss

我只在特定的字符串字段中收到錯誤,我在下面給出了我的代碼

public static void main(String[] args) throws ParseException {

    String sDate1="201710164425";  
    Date date1=new SimpleDateFormat("yyyyMMddhhmmss").parse(sDate1);  
    System.out.println(sDate1+"\t"+date1);  
}

如果我將String更改為在4 sDate1="2017101604425";之前加0 sDate1="2017101604425"; 它工作正常,我得到Mon Oct 16 04:42:05 IST 2017 ,但是我的輸入是通過sDate1="201710164425"; 提前感謝我幫助我提供更好的解決方案

yyyyMMddhhmmss  <- format
201710164425    <- data

因此,對於第4個小時,您需要執行04 (hh)而不是4。

您想要的是不帶前導零的“小時值”,我還看到分鍾和/或秒應該相同,因此可以使用類似Hms的時間格式。

  • H:一天中的小時(0-23)或(k:一天中的小時(1-24))
  • m:時分
  • s:分鍾

相比於HHmmss ,具有類似於格式Hms將只需要數字量最少的為每個字段(這要復雜得多,但它的想法)。

問題

可能會錯過解釋。 假設我想給您發送時間,例如01:21:05 ,它將看起來像1215以匹配您所需的模式。

new SimpleDateFormat("Hms")

1215-> 01:02:15

看到問題了嗎? 01:21:05將會是01:02:15

我總是建議對每個字段使用前導零(兩位數),以防止出現任何錯誤。

  1. 使用前導零

每個字段使用兩位數字以防止出現任何問題

new SimpleDateFormat("HHmmss")

012105-> 01:21:05

  1. 添加一些分隔符

您可以定義一個模式以在每個字段之間使用分隔符:

new SimpleDateFormat("H:m:s")

1:21:5-> 01:21:05

您可以使用SimpleDateFormat另一種模式來實現所需的功能:

 yyyyMMddKmmssa

哪里

 K  - Hour in am/pm (0-11)
 a  - Am/pm marker

注意,您需要最后一個'a' 如果只想用4表示04:00和16:00,則需要一些區別。

暫無
暫無

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

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