在java中将日期转换为纳秒

时间:2017-05-18 00:47:33

标签: java string timestamp

我的日期格式为" 2017-05-17 00:31:16.227" ,我需要将其转换为" 17 -MAY-17 12.31.16.227000000 AM"

String convertTimestamp(Timestamp date) {

    String newstring = null;
    try {
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss.SSSSSSSSS");
        java.util.Date date1 = dateFormat.parse(date.toString());
        DateFormat sdf = new SimpleDateFormat("dd-MMM-yy hh.mm.ss.SSSSSSSSS aa");
        newstring = sdf.format(date1);

    } catch (Exception e) {
        e.printStackTrace();
    }

    System.out.println("new string" + newstring);

    return newstring;
}

但是我得到了这样的价值**" 17-MAY-17 12.31.16.000000227 AM"

1 个答案:

答案 0 :(得分:3)

您正在使用现在由java.time类取代的麻烦的旧旧日期时间类。这些遗留类仅限于milliseconds,这意味着小数点后三位小数。因此遗留类无法处理您想要的九位数。

您想要的小数部分的九位数意味着分辨率为nanoseconds而不是毫秒。幸运的是,java.time类的分辨率为纳秒。

将您的输入解析为LocalDateTime对象,因为它没有任何时区指示或从UTC偏移。将中间的空格替换为" T"符合标准ISO 8601格式。

String input = "2017-05-17 00:31:16.227".replace( " " , "T" ) ;
LocalDateTime ldt = LocalDateTime.parse( input );

您应该能够在表示此LocalDateTime对象的值的字符串中以小数部分强制所需的尾随零。使用DateTimeFormatterDateTimeFormatterBuilder