Java格式的字符串到日期,格式为yyyy-MM-dd-HH.mm.ss.SSSSSS到yyyy-MM-dd HH:mm:ss:SSSSSS

时间:2016-05-12 08:11:08

标签: java

我使用下面的转换逻辑将传入的字符串转换为日期。但是,'时间'部分未在输出中正确转换。请在下面找到代码和输出。

        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

请帮助我获得正确的输出。

2 个答案:

答案 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:

  1. https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html
  2. https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html
  3. 你会注意到,对于SimpleDateFormat,你有:

      

    毫秒数978

    对于DateTimeFormatter,你有:

      

    秒分数978

    正如你所看到的,在SimpleDateFormat中,你的S确实只是一个毫秒,而在DateTimeFormatter中,S实际上是一个更宽的数字,这意味着分数