我使用下面的转换逻辑将传入的字符串转换为日期。但是,'时间'部分未在输出中正确转换。请在下面找到代码和输出。
String inputDate ="2016-04-22-00.56.03.389289";
System.out.println(inputDate);
String frmFormat = "yyyy-MM-dd-HH.mm.ss.SSSSSS";
String toFormat = "yyyy-MM-dd HH:mm:ss:SSSSSS";
DateFormat from = new SimpleDateFormat(frmFormat);
DateFormat to = new SimpleDateFormat(toFormat);
try {
Date date = from.parse(inputDate);
System.out.println("New date:" + to.format(date));
} catch (Exception e) {
e.printStackTrace();
}
输出: 新日期:2016-04-22 01:02:32:000289
请帮助我获得正确的输出。
答案 0 :(得分:0)
Java日期仅支持毫秒的分辨率。但是,您的日期需要微秒级分辨率。
日期格式中的问题是最后一部分:.SSSSSS
。这是毫秒的格式。 389289毫秒是389秒加上289毫秒。因此,您的日期将添加389秒,毫秒部分无效。
切断最后三位数或查找支持微秒的其他Java类。
答案 1 :(得分:0)
对于JDK 8,您只需使用:
private static final DateTimeFormatter FRMFORMAT = DateTimeFormatter.ofPattern("yyyy-MM-dd-HH.mm.ss.SSSSSS");
private static final DateTimeFormatter TOFORMAT = DateTimeFormatter.ofPattern("yyyy-MM-dd-HH:mm:ss:SSSSSS");
对此的解释是,如果你去SimpleDateFormat api和DateTimeFormatter api:
你会注意到,对于SimpleDateFormat,你有:
毫秒数978
对于DateTimeFormatter,你有:
秒分数978
正如你所看到的,在SimpleDateFormat中,你的S确实只是一个毫秒,而在DateTimeFormatter中,S实际上是一个更宽的数字,这意味着分数。