Date作为LocalDateTime的longvalue

时间:2018-01-30 11:18:20

标签: java java-time datetime-conversion

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

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

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

2 个答案:

答案 0 :(得分:1)

SELECT [Year], Market,
       ISNULL(Jan,0) AS Jan,
       ISNULL(Feb,0) AS Feb, ...

答案 1 :(得分:0)

Nizet先生已经提供了an excellent answer。这只是我:我想解析输入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

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

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

变通方法格式化程序在秒数上有三位小数,对应于毫秒,而long只有两位小数。所以上面我在解析前向字符串添加了额外的0。这是我可以在Java 8中工作的(也试过appendFraction(),徒劳)。现在结果与上面相同。