Java 8 LocalDate 到 JavaScript Date
Java 8 LocalDate to JavaScript Date
我想将此 Java LocalDate
转换为 Java 脚本 Date
:
{
"date": {
"year": 2016,
"month": "NOVEMBER",
"dayOfMonth": 15,
"monthValue": 11,
"dayOfWeek": "TUESDAY",
"era": "CE",
"dayOfYear": 320,
"leapYear": true,
"chronology": {
"id": "ISO",
"calendarType": "iso8601"
}
}
您的日期字符串未指定时区。您还缺少时间信息,而 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"
当您将时间类型从 Java 发送到其他系统时,您应该明确时间和时区等内容。如果实例确实是 Local 日期,您不想通过选择任意时区将其转换为通用时间轴上的瞬间。 UTC 是任意的。 默认时区也是如此。
2016 年 3 月 14 日对于地球两端的系统来说应该意味着同样的事情。 ISO8601 就是为此目的而存在的。
我建议在将 Java LocalDate 发送到您的 JS 客户端时,使用 JSON 将其编码为 ISO8601 格式的字符串,使用 DateTimeFormatter.ISO_LOCAL_DATE.format(localDate)
并从 JSON 解析使用 LocalDate.parse(text, DateTimeFormatter.ISO_LOCAL_DATE)
。
Java脚本的 Date
更像是旧的 Java Date
class 并且同样被错误命名。然而,Java脚本的 Date
将通过构造或通过 Date.parse()
函数愉快地解析 ISO8601 格式的字符串,并将通过 Date.toISOString()
生成 ISO8601 字符串。请注意,Java脚本会将缺少的时区(表示 Java 中的本地值)解释为 UTC。当您指的是 UTC 并假设 JS 客户端始终向您发送分区值时,始终使用祖鲁时区可以明确无误。
或者直接使用JS-Joda.
我想将此 Java LocalDate
转换为 Java 脚本 Date
:
{
"date": {
"year": 2016,
"month": "NOVEMBER",
"dayOfMonth": 15,
"monthValue": 11,
"dayOfWeek": "TUESDAY",
"era": "CE",
"dayOfYear": 320,
"leapYear": true,
"chronology": {
"id": "ISO",
"calendarType": "iso8601"
}
}
您的日期字符串未指定时区。您还缺少时间信息,而 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"
当您将时间类型从 Java 发送到其他系统时,您应该明确时间和时区等内容。如果实例确实是 Local 日期,您不想通过选择任意时区将其转换为通用时间轴上的瞬间。 UTC 是任意的。 默认时区也是如此。
2016 年 3 月 14 日对于地球两端的系统来说应该意味着同样的事情。 ISO8601 就是为此目的而存在的。
我建议在将 Java LocalDate 发送到您的 JS 客户端时,使用 JSON 将其编码为 ISO8601 格式的字符串,使用 DateTimeFormatter.ISO_LOCAL_DATE.format(localDate)
并从 JSON 解析使用 LocalDate.parse(text, DateTimeFormatter.ISO_LOCAL_DATE)
。
Java脚本的 Date
更像是旧的 Java Date
class 并且同样被错误命名。然而,Java脚本的 Date
将通过构造或通过 Date.parse()
函数愉快地解析 ISO8601 格式的字符串,并将通过 Date.toISOString()
生成 ISO8601 字符串。请注意,Java脚本会将缺少的时区(表示 Java 中的本地值)解释为 UTC。当您指的是 UTC 并假设 JS 客户端始终向您发送分区值时,始终使用祖鲁时区可以明确无误。
或者直接使用JS-Joda.