是否有一种简单的方法可以将JavaScript日期转换为带有时区的Java8日期时间?
我有一个web应用程序,它由两个部分组成,前端用JavaScript编写,后端用Java编写。用户应该能够在UI中选择一个日期时间,并且这个值应该由后端使用。将此值转换为Java日期时间的最简单方法是什么?
发布于 2016-03-31 08:04:57
您可以使用通用协调时间(UTC)和ZonedDateTime转换时间,例如:
Thu, 31 Mar 2016 06:49:02 GMT
Thu, 31 Mar 2016 06:49:02 -0830JavaScript
var d = new Date();
var n = d.toUTCString();toUTCString()方法根据通用时间将日期对象转换为字符串。例如,console.log(n);将输出一个结果:
Tue, 17 Mar 2020 08:59:19 GMTJava 8
ZonedDateTime zdt = ZonedDateTime.parse(text, DateTimeFormatter.RFC_1123_DATE_TIME);文本是UTC日期和时间字符串。
ZonedDateTime是ISO-8601日历系统中具有时区的日期时间。
时间是一个预定义的RFC-1123日期时间格式化程序.
为上面的示例值打印zdt将产生:
2020-03-17T08:59:19Z发布于 2016-08-15 20:16:20
ZoneId.of("UTC");
ZoneId.of("-08:00");发布于 2017-12-22 17:27:30
最近,我不得不在一个具有Java服务器后端和Javascript运行浏览器的web应用程序中这样做。问题是构建要发送到服务器的请求的Javascript代码与我的代码关闭,因此我无法调用Javascript Date对象实例上的任何特定方法来控制格式设置。因此,toString()方法被隐式调用,其结果字符串如下所示:
Mon Sep 28 1998 14:36:22 GMT-0700 (PDT)
使用Chrome、Firefox或Safari时
深入研究规格说明可以发现,此方法调用toDateString(tv),其中tv是日期实例的时间值。
不幸的是,似乎要由实现风格来决定这到底是如何显示的:
返回一个依赖于实现的字符串值,该值将tv表示为当前时区中的日期和时间,使用方便的、可读的形式。
因此,我们不能确定所有浏览器在调用.toString()时都会以相同的方式格式化日期,但我在用几个浏览器进行测试并将区域设置、语言和日历更改为各种有趣的设置(例如埃塞俄比亚)时,偶然地观察到了相同的格式,但我的结果仍然是相同的日期格式。
假设它是一致的,我们现在可以使用以下方法解析Java中的日期:
ZonedDateTime zdt = DateTimeFormatter.ofPattern("EEE MMM d yyyy HH:mm:ss 'GMT'Z (z)")
它保存客户端发送的时区信息。
无论如何,我希望这对其他人是有用的,如果有人能指出任何关于Javascript日期toString()方法的一致性的文档,我将不胜感激。
https://stackoverflow.com/questions/36327539
复制相似问题