如何添加Java长后缀l

时间:2018-12-18 18:29:46

标签: java types timestamp long-integer

我实际上正在努力如何将“ L”后缀添加到长值中。

JSON服务为我提供了几秒钟的时间戳。在我的输出中,我想以一种易读的格式花费一秒钟的时间。 因此,我想使用SimpleDateFormat,它需要一个以毫秒为单位的时间戳。

所以我得到的值是1545151800,以秒为单位。 要使我进入毫秒级,它将是(* 1000)1545151800000

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

如何完成将“ L”添加到我的值中?无法将一些字符添加到long中。 如果我不关心“ L”后缀,则会得到不同的(错误的)结果。

2 个答案:

答案 0 :(得分:0)

最后我找到了解决方案。问题不是T.J.这样的后缀人群指出。 这与我的JAXB和json服务有关。

Before fix

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

After fix

答案 1 :(得分:0)

java.time

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

您可以在班级中只声明一次日期格式化程序,而不是为每次调用toString创建一个新的日期格式化程序:

static DateTimeFormatter dateFormatter
        = DateTimeFormatter.ofPattern("dd/MM/uuuu", Locale.US);

在我位于欧洲/哥本哈根时区的计算机上,这给出了humanDateOfData的{​​{1}},您现在可以将其用于18/12/2018的返回值。

在这种情况下,代码比您拥有的代码长,但是我仍然热烈推荐它。您使用的日期和时间类toStringDate的设计很差,众所周知,后者很麻烦。他们也早已过时。相反,我使用的是java.time,这是2014年推出的现代Java日期和时间API。而且,乘以1000似乎很简单,但是自己进行时间转换通常很复杂且容易出错,因此这是一个坏习惯进入。 SimpleDateFormat直接从该纪元开始接受秒数,因此不再需要。最后,现代代码清楚地表明,我喜欢使用时区来确定日期。如果您知道时区,则也可以指定哪个时区,例如Instant

Lonk: Oracle Tutotial: Date Time