【问题标题】:How to convert the date format "/Date(253402214400000+0000)/" into yyyyMMdd:hhmmss in Java? [duplicate]如何在 Java 中将日期格式 \"/Date(253402214400000+0000)/\" 转换为 yyyyMMdd:hhmmss? [复制]
【发布时间】:2023-02-03 02:09:42
【问题描述】:

今天我们有纪元格式的日期/时间"/Date(16747622680000)/",当从字符串中获取以毫秒为单位的数字并将其传递给java.util.Date today = new Date(16747622680000);的实例,然后使用java.text.SimpleDateFormat实例来得到预期的结果。

但是"/Date(253402214400000+0000)/"中的"+0000"是什么意思,如何转换这个值呢?

【问题讨论】:

  • 只是一点猜测,但它似乎是一个时区偏移值(可能是ZZZZ
  • “然后使用 java.text.SimpleDateFormat 实例获得预期结果”而且,不,不要那样做。而是使用更新和改进的 java.time API
  • new Date(16747622680000) 再一次,不,不要那样做。请改用LocalDateTime.now()ZonedDateTime.now()
  • 在您输入的 16747622680000 示例中,您真的是指 14 位数字吗?或者这是一个错字,末尾的零数字太多了?

标签: java date datetime-format epoch datetime-conversion


【解决方案1】:

tl;博士

+0000 表示与 UTC 的零小时-分钟-秒的偏移量。

(删除示例输入的最后零位数字,推测为错字)

Instant
.ofEpochMilli( 
    "/Date(1674762268000)/".replace( "/" , "" ).replace( "Date(" , "" ).replace( ")" , "" ).replace( "/" , "" )
)
.toString()

看到这个code run at IdeOne.com

2023/1/26 19:44:28

?最后的Z和你问题中看到的+0000,都意味着offset from UTC为零小时-分钟-秒。

java.time

java.util.Date 今天的一个实例 = new Date(16747622680000);然后使用 java.text.SimpleDateFormat

不,永远不要使用Date & SimpleDateFormat。这些类现在是遗留的并且存在严重缺陷,由不了解日期时间处理的人设计。他们多年前被现代取代java.timeJSR 310 中定义的类。

我们有纪元格式的日期/时间“/Date(16747622680000)/”

首先,清理您的输入字符串以仅获取数字。

另外,我假设你打错了,最后多了一个零数字。我删除了那个数字。

String input = "/Date(1674762268000)/";
String inputDigits = input.replace( "/" , "" ).replace( "Date(" , "" ).replace( ")" , "" ).replace( "/" , "" );
long countFromEpoch1970Utc = Long.parseLong( inputDigits );

此时,我们有一个值为 1_674_762_268_000L 的 long 整数。

countFromEpoch1970Utc = 1674762268000

将该数字解析为自 1970 年第一时刻的纪元参考以来的毫秒数,与 UTC 的偏移量为零时分秒,1970-01-01T00:00Z。

Instant instant = Instant.ofEpochMilli( countFromEpoch1970Utc );

看到这个code run at IdeOne.com

instant.toString(): 2023-01-26T19:44:28Z

国际标准化组织 8601

字符串2023-01-26T19:44:28Z 中的文本采用ISO 8601 标准定义的格式。我建议您向您的数据发布者宣传在以文本方式传达日期时间数据时仅使用 ISO 8601 格式的优点。

? 末尾的 Z 发音为“Zulu”,表示与 UTC 的零时分秒偏移。另一种写入零偏移量的标准方法是+00:00。 ISO 8601 标准允许省略 COLON 字符,以获得 +0000 如您的问题所示。

我建议始终在偏移量中包含 COLON 字符,并在需要时始终包含前导填充零。虽然两者在标准中都是可选的,但我已经看到多个库和协议需要它们。

【讨论】:

  • 到 9999-12-31T00:00:00Z 为止的毫秒数是 253402214400000。所以我们不讨论拼写错误。
猜你喜欢
  • 2012-01-05
  • 2015-08-14
  • 1970-01-01
  • 2016-06-13
  • 1970-01-01
  • 2018-05-05
  • 2018-08-11
  • 2015-08-16
  • 1970-01-01
相关资源
最近更新 更多