如何使用时区将JavaScript Date转换为Java日期时间?

时间:2016-03-31 08:04:39

标签: javascript java

是否有一种简单的方法可以将JavaScript Date转换为带有时区的Java 8日期时间?

我有一个Web应用程序,它由两部分组成,前端用JavaScript编写,后端用Java编写。用户应该能够在UI中选择日期时间,并且后端应该使用该值。将此值转换为Java日期时间的最简单方法是什么?

3 个答案:

答案 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]");