如何在Java中将JavaScript日期转换为日期?

时间:2012-07-30 13:41:33

标签: java javascript date

我需要将JsDate转换为java.util.Date.我搜索但我找不到任何内容。你能解决这个问题吗?

编辑:我在GWT屏幕上执行此转换过程。我在屏幕上显示Datepicker,当我使用JsDate方法时,它会给我getValue()值。所以我应该将此值放入具有Date类型的对象的属性中。

ObjectName.setDate(PickerName.getValue());

我希望我的编辑会更清晰。

编辑2:

这一行解决了我的问题:

myObject.setDate(new Date((long) myPicker.getValue().getTime()));

7 个答案:

答案 0 :(得分:35)

日期转换的最佳方式是使用以毫秒为单位的时间,UTC。 JS Date对象和java.util.Date类都支持转换为毫秒(getTime())并从毫秒实例化(使用构造函数)。

答案 1 :(得分:34)

您可以从JS java.util.Date

的'epoch'时间值开始创建Date个对象

<强>的javascript

var d = new Date().getTime();

<强>的java

// get value from client (ajax, form, etc), and construct in Date object

long valueFromClient = ...

Date date = new Date(valueFromClient);

String formatted = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date);

答案 2 :(得分:11)

如果像我这样的人被迫解析JS格式的日期字符串(作为JavaScript中(new Date()).toString()的结果),这里是我使用的SimpleDateFormat规范:

DateFormat jsfmt = new SimpleDateFormat("EE MMM d y H:m:s 'GMT'Z (zz)");

如果您掌握了日期的制作者,我同意使用时间戳或至少.toUTCString()肯定更强大。

答案 3 :(得分:2)

你可能想要这个:

java:
String jsDate="2013-3-22 10:13:00";
Date javaDate=new SimpleDateFormat("yy-MM-dd HH:mm:ss").parse(jsDate);
System.out.println(javaDate);

答案 4 :(得分:1)

ISO 8601 和 java.time

ISO 8601 是日期和时间的国际标准,包括日期和时间格式。几乎任何编程语言都支持它,包括 JavaScript 和 Java。

在 JavaScript 中,使用 Date.toISOString() 生成 ISO 8601 格式的字符串。我们不需要任何格式化程序。

  var d = new Date();
  var n = d.toISOString();
  console.log(n);

只要您记住结果是 UTC 格式,即由尾随 Z 表示,结果在某种程度上是人类可读的。

在 Java 中使用 Instant.parse() 解析字符串。我们也不需要在这里指定任何格式化程序。

    String stringFromJavaScript = "2021-07-12T05:54:03.365Z";
    Instant inst = Instant.parse(stringFromJavaScript);
    System.out.println(inst);

输出:

<块引用>

2021-07-12T05:54:03.365Z

该问题要求为日期选择器的结果提供 java.util.Date。我们应该避免为此使用 java.util.Date,因为尽管名称 Date 并不代表日期,而且 Date 类的设计很差并且已经过时了。对于没有时间的日期,LocalDate 是合适的:

    LocalDate date = inst.atZone(ZoneId.systemDefault()).toLocalDate();
    System.out.println(date);

在我的时区输出是:

<块引用>

2021-07-12

转换取决于时区,并且只有在 JVM 的默认时区(或您传递给 atZone() 的时区)与日期选择器使用的时区相同时才会正确。

如果对于尚未升级到 java.time 的旧 API,您确实需要 Date

    Date oldfashionedDate = Date.from(inst);
    System.out.println(oldfashionedDate);
<块引用>

2021 年 7 月 12 日星期一 07:54:03 CEST

链接

答案 5 :(得分:0)

我建议使用DateFormat解析方法(可以找到doc here)。它可以解析日期的字符串表示并返回java.util.Date。

答案 6 :(得分:0)

JS日期- 新的Date() 2019年8月14日星期三14:54:38 GMT + 0530(印度标准时间)

Java日期- 新的Date()。toISOString() “ 2019-08-14T09:25:50.136Z”