是否有一种简单的方法可以将JavaScript Date转换为带有时区的Java 8日期时间?
我有一个Web应用程序,它由两部分组成,前端用JavaScript编写,后端用Java编写。用户应该能够在UI中选择日期时间,并且后端应该使用该值。将此值转换为Java日期时间的最简单方法是什么?
答案 0 :(得分:0)
您可以使用通用协调时间(UTC)和ZonedDateTime转换时间,例如:
Thu, 31 Mar 2016 06:49:02 GMT
Thu, 31 Mar 2016 06:49:02 -0830
<强>的JavaScript 强>
var d = new Date();
var n = d.toUTCString();
toUTCString()方法根据通用时间将Date对象转换为字符串。
Java 8
ZonedDateTime zdt = ZonedDateTime.parse(text, DateTimeFormatter.RFC_1123_DATE_TIME);
text是UTC日期和时间字符串
ZonedDateTime是ISO-8601日历系统中具有时区的日期时间
RFC_1123_DATE_TIME是预定义的RFC-1123日期时间格式化程序。
答案 1 :(得分:0)
我最近不得不在带有Java服务器后端和运行浏览器的Javascript的Web应用程序中执行此操作。问题是构建要发送到服务器的请求的Javascript代码对我的代码是关闭的,所以我无法调用Javascript Date对象实例上的任何特定方法来控制格式。因此隐式调用toString()
方法,结果字符串如下所示:
Mon Sep 28 1998 14:36:22 GMT-0700 (PDT)
使用Chrome,Firefox或Safari时
深入研究specification会发现此方法调用toDateString(tv)
,其中tv
是Date实例的时间值。
不幸的是,这似乎取决于实现的味道,以决定最终如何显示:
返回一个依赖于实现的String值,该值使用方便的,可读的形式将tv表示为当前时区中的日期和时间。
因此,我们无法确定所有浏览器在调用.toString()
时都会以相同的方式格式化日期,但有趣的是,当我使用少量浏览器进行测试并更改了区域设置时,我观察到相同的格式,语言和日历到各种有趣的(如埃塞俄比亚语),我仍然使用相同的日期格式。
假设它是一致的,我们现在可以使用以下内容在Java中解析日期:
ZonedDateTime zdt = DateTimeFormatter.ofPattern("EEE MMM d yyyy HH:mm:ss 'GMT'Z (z)")
保留客户端发送的时区信息。
无论如何,我希望这对其他人有用,如果有人能指出任何关于Javascript Date toString()
方法的(in)一致性的文档,我将不胜感激。
答案 2 :(得分:0)
如果你可以使用momentjs,这里有一些简单的东西可以被Java8轻松消费:
var zone = moment.tz.guess();
var localDateTime = moment("2018-11-17T11:43:13").format('YYYY-MM-DDTHH:mm:ssZ');
console.log(localDateTime + '[' + zone + ']');
产生(在我的时区):
2018-11-17T11:43:13-05:00[America/Toronto]
在Java8方面:
final ZonedDateTime parsed = ZonedDateTime.parse("2018-11-17T11:43:13-05:00[America/Toronto]");