我有一个采用这种格式的日期“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”
最佳答案
您正在使用麻烦的旧遗留日期时间类,这些类现在已被 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
对象的值的字符串中强制在小数部分中添加所需的尾随零。使用 DateTimeFormatter
或 DateTimeFormatterBuilder
.
关于java - 在java中将日期转换为纳秒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44036879/