格式为yyyyMMddhhmmss的Java String to date转换错误

时间:2018-05-08 09:29:45

标签: java java-date

我只收到特定字符串字段的错误,我在下面给出了我的代码

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更改为在sDate1="2017101604425";之前添加0,它可以正常工作,我得到Mon Oct 16 04:42:05 IST 2017,但我的输入是这样的sDate1="201710164425"; 帮助我为此提供更好的解决方案,提前致谢

3 个答案:

答案 0 :(得分:4)

yyyyMMddhhmmss  <- format
201710164425    <- data

所以第4小时你需要做04(hh)而不是4.相同的分钟。

答案 1 :(得分:2)

你想要的是一个没有前导零的“小时值”,我也看到分钟和/或秒应该是相同的,所以你可以使用像Hms这样的时间格式。

  • H:白天的小时(0-23)或(k:白天的小时(1-24))
  • m:小时分钟
  • s:分秒钟

HHmmss相比,使用Hms这样的格式只会为每个字段占用最少的数字(更复杂,但这是主意)。

问题

这可能是错过解释。假设我想向您发送01:21:05之类的时间,它看起来像1215以匹配您需要的模式。

new SimpleDateFormat("Hms")
  

1215 - &gt; 1点02分15秒

看到问题? 01:21:05将来01:02:15

我总是建议为每个字段使用前导零(两位数)来防止任何错误。

解决方案

  1. 使用前导零
  2. 为每个字段使用两位数以防止出现任何问题

    new SimpleDateFormat("HHmmss")
    
      

    012105 - &gt; 1点21分05秒

    1. 添加一些分隔符
    2. 您可以定义模式以在每个字段之间使用分隔符:

      new SimpleDateFormat("H:m:s")
      
        

      1:21:5 - &gt; 01:21:05

答案 2 :(得分:1)

您可以使用SimpleDateFormat中的其他模式实现您想要的效果:

 yyyyMMddKmmssa

哪里

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

请注意,您需要最后一个'a'。如果你只需要一个4来指示04:00和16:00,你需要一些东西来区分它们。