我实际上正在努力如何将“ L”后缀添加到长值中。
JSON服务为我提供了几秒钟的时间戳。在我的输出中,我想以一种易读的格式花费一秒钟的时间。 因此,我想使用SimpleDateFormat,它需要一个以毫秒为单位的时间戳。
所以我得到的值是1545151800,以秒为单位。 要使我进入毫秒级,它将是(* 1000)1545151800000
因为它很长,所以它的值应该为1545151800000L。
如何完成将“ L”添加到我的值中?无法将一些字符添加到long中。 如果我不关心“ L”后缀,则会得到不同的(错误的)结果。
答案 0 :(得分:0)
最后我找到了解决方案。问题不是T.J.这样的后缀人群指出。 这与我的JAXB和json服务有关。
将这两行放入我的toString()方法后,一切正常。当timeOfData仍为0时,已经使用了timeOfDataL。因此0导致01/01/1970
答案 1 :(得分:0)
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
的返回值。
在这种情况下,代码比您拥有的代码长,但是我仍然热烈推荐它。您使用的日期和时间类toString
和Date
的设计很差,众所周知,后者很麻烦。他们也早已过时。相反,我使用的是java.time,这是2014年推出的现代Java日期和时间API。而且,乘以1000似乎很简单,但是自己进行时间转换通常很复杂且容易出错,因此这是一个坏习惯进入。 SimpleDateFormat
直接从该纪元开始接受秒数,因此不再需要。最后,现代代码清楚地表明,我喜欢使用时区来确定日期。如果您知道时区,则也可以指定哪个时区,例如Instant
。