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
capital
Z
表示时区偏移,而您的值中没有。此外,格式化程序必须匹配值,而不是所需的输出。长值的可能副本应该是stringConvert到
字符串
,然后使用
LocalDate。parse
capital
Z
表示时区偏移,而您的值中没有。此外,格式化程序必须匹配值,而不是所需的输出可能重复,因此,如果我尝试使用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
的完整精度。