我想将此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"
}
}
答案 0 :(得分: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"
答案 1 :(得分:0)
当您将时间类型从Java发送到其他系统时,您应该清楚时间和时区之类的内容。如果实例确实是 Local 日期,则您不想通过选择任意时区将其转换为通用时间轴上的瞬间。 UTC是任意的。 默认时区也是如此。
2016年3月14日对于全球相反的系统都应具有相同的含义。为此存在ISO8601。
我建议在将Java LocalDate发送到JS客户端时,使用DateTimeFormatter.ISO_LOCAL_DATE.format(localDate)
将其以JSON格式编码为ISO8601格式的字符串,并使用LocalDate.parse(text, DateTimeFormatter.ISO_LOCAL_DATE)
从JSON进行解析。
JavaScript的Date
更类似于旧的Java Date
类,并且类似地被错误命名。但是,JavaScript的Date
可以通过构造或通过Date.parse()
函数来愉快地解析ISO8601格式的字符串,并可以通过Date.toISOString()
生成ISO8601字符串。请注意,JavaScript会将缺少的时区(在Java中表示本地值)解释为UTC。当您指的是UTC时并始终使用Zulu时区,并假设JS客户端始终向您发送分区值,那么您就可以毫不含糊。
或者只使用JS-Joda。