Java 8 LocalDate到JavaScript日期

时间:2016-11-15 14:33:55

标签: javascript java angularjs localdate

我想将此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"
        }
    }

2 个答案:

答案 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。