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

How to Convert JavaScript Date to Date in Java?

本文关键字:日期 转换 JavaScript 中将 Java      更新时间:2024-05-19

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

编辑:我在GWT屏幕上进行此转换过程。我在屏幕上有Datepicker,当我使用它getValue()方法时,它给了我JsDate价值。所以我应该把这个值放到一个具有Date类型的对象的属性中。

ObjectName.setDate(PickerName.getValue());

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

编辑2:

这一行是我问题的解决方案:

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

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

您可以从 JS Date的"自纪元以来的时间"值创建一个java.util.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);

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

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

如果你可以控制日期的生产者,我同意使用时间戳或至少.toUTCString()肯定更健壮。

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);

周一 7月 12 07:54:03 CEST 2021

链接

  • 维基百科文章:ISO 8601
  • Oracle 教程:日期时间解释如何使用 java.time。

你可能想要这个:

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);

我建议使用DateFormat解析方法(文档可以在这里找到(。它可以解析日期的字符串表示形式并返回java.util.Date。

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

爪哇日期 --new Date((.toISOString(("2019-08-14T09:25:50.136Z">