如何添加Java长后缀l

How to add Java long suffix l

我实际上正在努力研究如何将 "L" 后缀添加到 long 值。

A​​ JSON 服务以秒为单位为我提供时间戳。在我的输出中,我想以某种可读的格式显示那几秒钟。 因此我想使用 SimpleDateFormat,它需要以毫秒为单位的时间戳。

所以我得到了以秒为单位的值 1545151800。 要将 i 转换为毫秒,它将是 (*1000) 1545151800000

因为它很长,所以它的值应该是 1545151800000L。

如何才能将 "L" 添加到我的值中?不可能向 long 添加一些字符。 如果我不关心 "L" 后缀,我会得到不同(错误)的结果。

终于找到解决办法了。问题不在于像 T.J 这样的后缀。克劳德指出。 这与我的 JAXB 和 json 服务有关。

Before fix

将这两行代码放入我的 toString() 方法后,一切正常。 timeOfDataL 已被使用,而 timeOfData 仍为 0。因此 0 导致 01/01/1970

After fix

java.time

    String humanDateOfData = Instant.ofEpochSecond(timeOfData)
            .atZone(ZoneId.systemDefault())
            .format(dateFormatter);

您可以在 class 中只声明一次日期格式化程序,而不是为每次调用 toString:

创建一个新的日期格式化程序
static DateTimeFormatter dateFormatter
        = DateTimeFormatter.ofPattern("dd/MM/uuuu", Locale.US);

在我的 Europe/Copenhagen 时区的计算机上,这给出了 18/12/2018humanDateOfData,您现在可以在 toString 的 return 值中使用。

在这种情况下,代码比您拥有的代码长,但我仍然热烈推荐它。您使用的日期和时间 classes,DateSimpleDateFormat 设计不佳,后者出了名的麻烦。它们也早已过时。相反,我使用的是 java.time,2014 年推出的现代 Java 日期和时间 API。此外,虽然乘以 1000 可能看起来很简单,但自己进行时间转换通常很复杂并且容易出错,所以这是一个坏习惯。 Instant 直接接受纪元以来的秒数,所以不再需要了。最后,现代代码明确表示使用时区来决定日期,我喜欢这样。如果您知道时区,您还可以指定哪个时区,例如 ZoneId.of("Asia/Harbin").

隆克: Oracle Tutotial: Date Time