2017-01-23 51 views
1

在以下代码中,日期在解析时发生了变化: 特别是分钟数增加了5分钟。 这是怎么回事?日期在解析时发生变化

String inputDate="2016-12-01T16:30:59.264448";    
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss.SSSSSS"); 
SimpleDateFormat dateFormat1 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); 
java.util.Date parsedTimeStamp=null; 

if(!inputDate.contains(".")){ 
    try { 
      parsedTimeStamp = dateFormat1.parse(inputDate.replace("T", " ")); 
    } catch (ParseException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
    } 
}else{ 
    try { 
    parsedTimeStamp = dateFormat.parse(inputDate.replace("T", " ")); 

    } catch (ParseException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
    } 
} 
System.out.println("Date-->"+parsedTimeStamp); 
+1

inputDate?它在哪里? –

+0

2016-12-01T16:30:59.264448 – user7456985

+1

似乎'inputDate'你的意思是字符串'parsedInput',这是一个错字还是inputDate是一个不同的变量? –

回答

1

如果您对输入保留微秒精度有很强的要求,那么您可以考虑在Java-8中引入的新类java.time.LocalDateTime,该类可以存储长达纳秒。并且您的输入不包含任何区域或偏移量信息,因此LocalDateTime是类型的最佳选择。使用如仅有一个格式化:

String input1 = "2016-12-01T16:30:59.264448"; 
String input2 = "2016-12-01T16:30:59"; 

DateTimeFormatter dtf = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ss[.SSSSSS]"); 

LocalDateTime ldt1 = LocalDateTime.parse(input1, dtf); // 2016-12-01T16:30:59.264448 
LocalDateTime ldt2 = LocalDateTime.parse(input2, dtf); // 2016-12-01T16:30:59 

您还可以使用下面的桥梁,旧Date型(传统-API):

java.util.Date d = java.util.Date.from(ldt1.atZone(ZoneId.systemDefault()).toInstant()); 
+0

谢谢....它的工作.. – user7456985

2

两件事情,如果你看的文档,SimpleDateFormat(Java的8或7),特别是关于 “日期和时间模式” 的一部分,你注意到

h小时在一天(0 -23)在上午
h小时/时(1-12)

所以,你应该考虑使用下面的

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSSSS"); 
SimpleDateFormat dateFormat1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 

以及您提供的毫秒数转换为秒/分钟,从而得出结果。

+0

任何方式,我可以存储它,因为它是。然后打印也是完全相同的值 – user7456985

+0

虽然有一个更正。 'SimpleDateFormat'不能解析微秒,因此使用SSS而不是SSSSSS。 –