LocalDateTime到底怎么解析成两位数毫秒? Java
How to parse LocalDateTime to two digits millis in the end? Java
我想将 LocalDateTime 2021-11-24T15:11:38.395
解析为 LocalDateTime 2021-11-24T15:11:38.39
。但是 LocalDateTime.parse() 总是在最后加零,忽略我的模式。
public class DateTimeFormatUtils {
private static final String ISO_DATE_TIME = "yyyy-MM-dd'T'HH:mm:ss.SS";
public static LocalDateTime formatToISO(final LocalDateTime localDateTime) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(ISO_DATE_TIME);
return LocalDateTime.parse(formatter.format(localDateTime), formatter);
}
public static void main(String[] args) {
LocalDateTime now = LocalDateTime.now();
System.out.println(now);
System.out.println(formatToISO(now));
}
}
输出:
2021-11-30T11:48:28.449195200
2021-11-30T11:48:28.440
有什么办法可以解决这个问题吗?
Java 小数秒总是 return 3 位数。
解决方法是,首先将 LocalDateTime 转换为字符串,然后删除字符串的最后一个字符。
不对,请验证空检查。
private static String removeLastDigit(String localDateTime) {
return localDateTime.substring(0, localDateTime.length()-1);
}
注意字符串“2021-11-24T15:11:38.39”和“2021-11-24T15:11:38.390”代表相同的LocalDateTime
.从技术上讲,您已经获得了预期的输出!
既然你说输出不是你所期望的,你实际上期望的是 String
作为输出,因为“2021-11-24T15:11:38.39”和“2021-11-24T15” :11:38.390" 是不同的 字符串 。 formatToISO
应该 return 一个字符串 - 你不应该将格式化的日期解析回 LocalDateTime
:
public static String formatToISO(final LocalDateTime localDateTime) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(ISO_DATE_TIME);
return formatter.format(localDateTime);
}
这类似于初学者打印出 double
s 并期望他们用来分配给变量的特定格式出来的常见错误。
double d = 5;
System.out.println(d); // expected 5, actual 5.0
LocalDateTime
,就像 double
一样,不存储任何关于它应该如何格式化的信息。它只是存储一个值,相同的值将以相同的方式格式化。
我想将 LocalDateTime 2021-11-24T15:11:38.395
解析为 LocalDateTime 2021-11-24T15:11:38.39
。但是 LocalDateTime.parse() 总是在最后加零,忽略我的模式。
public class DateTimeFormatUtils {
private static final String ISO_DATE_TIME = "yyyy-MM-dd'T'HH:mm:ss.SS";
public static LocalDateTime formatToISO(final LocalDateTime localDateTime) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(ISO_DATE_TIME);
return LocalDateTime.parse(formatter.format(localDateTime), formatter);
}
public static void main(String[] args) {
LocalDateTime now = LocalDateTime.now();
System.out.println(now);
System.out.println(formatToISO(now));
}
}
输出:
2021-11-30T11:48:28.449195200
2021-11-30T11:48:28.440
有什么办法可以解决这个问题吗?
Java 小数秒总是 return 3 位数。
解决方法是,首先将 LocalDateTime 转换为字符串,然后删除字符串的最后一个字符。
不对,请验证空检查。
private static String removeLastDigit(String localDateTime) {
return localDateTime.substring(0, localDateTime.length()-1);
}
注意字符串“2021-11-24T15:11:38.39”和“2021-11-24T15:11:38.390”代表相同的LocalDateTime
.从技术上讲,您已经获得了预期的输出!
既然你说输出不是你所期望的,你实际上期望的是 String
作为输出,因为“2021-11-24T15:11:38.39”和“2021-11-24T15” :11:38.390" 是不同的 字符串 。 formatToISO
应该 return 一个字符串 - 你不应该将格式化的日期解析回 LocalDateTime
:
public static String formatToISO(final LocalDateTime localDateTime) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(ISO_DATE_TIME);
return formatter.format(localDateTime);
}
这类似于初学者打印出 double
s 并期望他们用来分配给变量的特定格式出来的常见错误。
double d = 5;
System.out.println(d); // expected 5, actual 5.0
LocalDateTime
,就像 double
一样,不存储任何关于它应该如何格式化的信息。它只是存储一个值,相同的值将以相同的方式格式化。