【发布时间】:2018-08-14 06:50:18
【问题描述】:
我正在尝试将1523265822618 解析为时间字符串。但是,它确实适用于除 Year 之外的所有内容。是我做错了什么还是 Java 的行为很奇怪?
long millis = job.lastBuild.timestamp * 1000
Date date = new Date(millis)
SimpleDateFormat sdf = new SimpleDateFormat("EEEE, dd MMMM, yyyy HH:mm:ss", Locale.GERMANY);
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
String formattedDate = sdf.format(date);
echo """${formattedDate}"""
>>> Samstag, 16 Mai, 50240 11:10:18
LocalDateTime dateTime = LocalDateTime.ofEpochSecond(job.lastBuild.timestamp, 0, ZoneOffset.UTC)
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("EEEE, dd MMMM, yyyy, HH:mm:ss", Locale.GERMANY)
formattedDate = dateTime.format(formatter)
echo """${formattedDate}"""
>>> Samstag, 16 Mai, +50240, 11:10:18
正确的输出是Samstag, 16 Mai, 2018, 11:10:18
抱歉,错误距离屏幕 40 厘米,感谢 MadProgrammer,job.lastBuild.timestamp 已经是毫秒
【问题讨论】:
-
是
1523265822618毫秒吗?纳秒?秒? -
我计算毫秒时您可能会看到的秒数;)
-
LocalDateTime dateTime = LocalDateTime.ofEpochSecond(1523265822618L / 1000, 0, ZoneOffset.UTC);将导致Monday, 09 April, 2018, 09:23:42(抱歉,删除了语言环境) -
所以,
LocalDateTime.ofEpochSecond的 JavaDocs 说 "epochSecond 从 1970-01-01T00:00:00Z 开始的秒数" 所以你需要转换你的“毫秒”值改为“秒”,这可以解释为什么我之前的评论似乎有效 -
您是无法看到您的时间戳确实以秒为单位,而正确的日期确实在 50240 年,或者您的期望是错误的,时间戳实际上已经以毫秒为单位,而实际日期更合理的是2018年4月9日。
标签: java datetime time datetime-format java-time