日期作为 LocalDateTime 的长值

Date as longvalue to LocalDateTime

如何将 2018051822111234L 之类的 long 值转换为 yyyyMMdd HH:mm

2018051822111234 -> 2018 05 18 22:11:12.

我尝试使用 LocalDate.parseDateFormatter(yyyy-MM-dd'T'HH:mm:ssZZZZZ)。它对我不起作用。

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"));

尼采先生已经提供。只有我:我想解析输入的完整精度 long。如果一开始没有解析信息,则稍后丢弃信息比稍后添加信息更容易。

Java9 解法:

    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

正如您自己所说,这在 Java 8 中不起作用,因为 this bug in the JRE: DateTimeFormatter won't parse dates with custom format "yyyyMMddHHmmssSSS"。错误报告提到了以下解决方法:

    DateTimeFormatter longFormatter = new DateTimeFormatterBuilder()
            .appendPattern("uuuuMMddHHmmss")
            .appendValue(ChronoField.MILLI_OF_SECOND, 3)
            .toFormatter();
    asString += '0';

解决方法格式化程序在秒上有三位小数,对应于毫秒,而您的 long 只有两位。所以上面我在解析之前附加了一个额外的 0 到字符串。这是我在 Java 8 中可以开始工作的(也尝试过 appendFraction(),但没有成功)。现在结果和上面一样。