Java 将日期作为longvalue转换为LocalDateTime
如何将长值(如Java 将日期作为longvalue转换为LocalDateTime,java,java-time,datetime-conversion,Java,Java Time,Datetime Conversion,如何将长值(如2018051822111234L转换为yyyyMMdd HH:mm 2018051822111234 -> 2018 05 18 22:11:12. 我试过使用LocalDate.parse和DateFormatter(yyyy-MM-dd'HH:MM:ssZZZZZ)。这对我不起作用。尼塞特先生已经提供了。只有我一个人:我想解析输入的完整精度long。如果一开始没有解析信息,那么以后丢弃信息要比以后添加信息容易得多 String asString = Long.toSt
2018051822111234L
转换为yyyyMMdd HH:mm
2018051822111234 -> 2018 05 18 22:11:12.
我试过使用
LocalDate.parse
和DateFormatter(yyyy-MM-dd'HH:MM:ssZZZZZ)
。这对我不起作用。尼塞特先生已经提供了。只有我一个人:我想解析输入的完整精度long
。如果一开始没有解析信息,那么以后丢弃信息要比以后添加信息容易得多
String asString = Long.toString(2018051822111234L);
asString = asString.substring(0, asString.length() - 2);
String result = LocalDateTime.parse(asString, DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))
.format(DateTimeFormatter.ofPattern("yyyy MM dd HH:mm:ss"));
Java 9解决方案:
DateTimeFormatter longFormatter = DateTimeFormatter.ofPattern("uuuuMMddHHmmssSS");
DateTimeFormatter desiredFormatter = DateTimeFormatter.ofPattern("uuuu MM dd HH:mm:ss");
String asString = Long.toString(2018051822111234L);
String result = LocalDateTime.parse(asString, longFormatter)
.format(desiredFormatter);
这张照片
2018 05 18 22:11:12
正如您自己已经说过的,这在Java8中不起作用,因为。bug报告提到了以下解决方法:
DateTimeFormatter longFormatter = new DateTimeFormatterBuilder()
.appendPattern("uuuuMMddHHmmss")
.appendValue(ChronoField.MILLI_OF_SECOND, 3)
.toFormatter();
asString += '0';
变通格式设置程序在秒上有三个小数,对应于毫秒,而
long
只有两个小数。因此,在解析之前,我在上面向字符串追加了一个额外的0
。这是我在Java8中所能得到的(也尝试了appendFraction()
,但徒劳无功)。现在结果与上面相同。尼塞特先生已经提供了。只有我一个人:我想解析输入的完整精度long
。如果一开始没有解析信息,那么以后丢弃信息要比以后添加信息容易得多
Java 9解决方案:
DateTimeFormatter longFormatter = DateTimeFormatter.ofPattern("uuuuMMddHHmmssSS");
DateTimeFormatter desiredFormatter = DateTimeFormatter.ofPattern("uuuu MM dd HH:mm:ss");
String asString = Long.toString(2018051822111234L);
String result = LocalDateTime.parse(asString, longFormatter)
.format(desiredFormatter);
这张照片
2018 05 18 22:11:12
正如您自己已经说过的,这在Java8中不起作用,因为。bug报告提到了以下解决方法:
DateTimeFormatter longFormatter = new DateTimeFormatterBuilder()
.appendPattern("uuuuMMddHHmmss")
.appendValue(ChronoField.MILLI_OF_SECOND, 3)
.toFormatter();
asString += '0';
变通格式设置程序在秒上有三个小数,对应于毫秒,而
long
只有两个小数。因此,在解析之前,我在上面向字符串追加了一个额外的0
。这是我在Java8中所能得到的(也尝试了appendFraction()
,但徒劳无功)。现在,结果与上面相同。您的长值应该是stringConvert到字符串
,然后使用LocalDate.parse
capitalZ
表示时区偏移,而您的值中没有。此外,格式化程序必须匹配值,而不是所需的输出。长值的可能副本应该是stringConvert到字符串
,然后使用LocalDate。parse
capitalZ
表示时区偏移,而您的值中没有。此外,格式化程序必须匹配值,而不是所需的输出可能重复,因此,如果我尝试使用YYYYMMDDHHMMSSSS模式添加ms,并且不更改字符串长度(字符串长度为17),它会抛出“索引0处无法解析”这是一个错误,将在Java 9->您链接到的错误报告@DevJam中修复,提到以下解决方法:DateTimeFormatter dtf=new DateTimeFormatterBuilder().appendPattern(“yyyyMMddHHmmss”).appendValue(ChronoField.milliu OF_SECOND,3).toFormatter()
。我更愿意尝试类似于解析long
的完整精度的方法。因此,如果我尝试添加带有YYYYMMDDHHMMSSSS模式的ms,但不更改字符串长度(字符串长度为17),它会抛出“索引0处无法解析”这是一个错误,并将在Java 9->您链接到的错误报告@DevJam中修复,提到以下解决方法:DateTimeFormatter dtf=new DateTimeFormatterBuilder().appendPattern(“yyyyMMddHHmmss”).appendValue(ChronoField.milliu OF_SECOND,3).toFormatter()
。我更愿意尝试类似的方法来解析long
的完整精度。