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