6

我想将此 Java 转换LocalDate为 JavaScript Date

{
    "date": {
        "year": 2016,
        "month": "NOVEMBER",
        "dayOfMonth": 15,
        "monthValue": 11,
        "dayOfWeek": "TUESDAY",
        "era": "CE",
        "dayOfYear": 320,
        "leapYear": true,
        "chronology": {
            "id": "ISO",
            "calendarType": "iso8601"
        }
    }
4

2 回答 2

6

您的日期字符串未指定时区。您还缺少时间信息,而 JavaScript 日期按设计存储一天中的时间。

您的字符串几乎是有效的 JSON,因此您可以通过JSON.parse(). 它只缺少一个右}括号。

考虑到上述评论,您可以使用以下方法:

var input = JSON.parse('{"date":{"year":2016,"month":"NOVEMBER","dayOfMonth":15,"monthValue":11,"dayOfWeek":"TUESDAY","era":"CE","dayOfYear":320,"leapYear":true,"chronology":{"id":"ISO","calendarType":"iso8601"}}}');
            
var day = input.date.dayOfMonth;
var month = input.date.monthValue - 1; // Month is 0-indexed
var year = input.date.year;

var date = new Date(Date.UTC(year, month, day));

console.log(date); // "2016-11-15T00:00:00.000Z"

于 2016-11-15T14:44:06.527 回答
1

当您将时间类型从 Java 发送到其他系统时,您应该对时间和时区等内容毫不含糊。如果实例确实是本地日期,您不想通过选择某个任意时区将其转换为通用时间线上的瞬间。UTC 是任意的。默认时区也是如此。

2016 年 3 月 14 日对于地球两端的系统来说应该是同样的事情。ISO8601 就是为此目的而存在的。

我建议在将 Java LocalDate 发送到 JS 客户端时,使用 JSON 将其编码为 ISO8601 格式的字符串,DateTimeFormatter.ISO_LOCAL_DATE.format(localDate)并使用LocalDate.parse(text, DateTimeFormatter.ISO_LOCAL_DATE).

JavaScriptDate更像是旧的 JavaDate类,并且名称也类似。然而,JavaScriptDate会很高兴地通过构造或通过Date.parse()函数解析 ISO8601 格式的字符串,并将通过Date.toISOString(). 请注意,JavaScript 会将缺少的时区(在 Java 中表示本地值)解释为 UTC。当您的意思是 UTC 并假设 JS 客户端总是向您发送分区值时,您可以通过始终使用 Zulu 时区来明确。

或者只是使用 JS-Joda。

于 2019-07-23T08:58:32.380 回答