首页 > 解决方案 > 将 Java OffsetDateTime 解析为 JS 日期

问题描述

在我的 JS 基础微服务中,我以某种方式从内部使用 OffSetDateTime 的 java 微服务中获取以下 JSON。

{
   "eventTime":   "eventTime":{
      "offset":{
         "totalSeconds":0,
         "id":"Z",
         "rules":{
            "fixedOffset":true,
            "transitions":[

            ],
            "transitionRules":[

            ]
         }
      },
      "year":2018,
      "month":"NOVEMBER",
      "dayOfMonth":9,
      "dayOfWeek":"FRIDAY",
      "dayOfYear":313,
      "monthValue":11,
      "hour":5,
      "minute":57,
      "second":21,
      "nano":716000000
   }
}

而不仅仅是

{"eventTime" :"2018-11-09T05:57:21.716Z" }

我如何在 JS 中解析这个?以下给了我 NaN

Date.parse(eventTime)

其中 eventTime 是上面提到的第一个字符串。

标签: javascriptnode.jsdatetimejava-time

解决方案


您需要手动解析它。像这样的东西会起作用:

var res = {
   "eventTime":{
      "offset":{
         "totalSeconds":0,
         "id":"Z",
         "rules":{
            "fixedOffset":true,
            "transitions":[

            ],
            "transitionRules":[

            ]
         }
      },
      "year":2018,
      "month":"NOVEMBER",
      "dayOfMonth":9,
      "dayOfWeek":"FRIDAY",
      "dayOfYear":313,
      "monthValue":11,
      "hour":5,
      "minute":57,
      "second":21,
      "nano":716000000
   }
};
var d = new Date(
  res.eventTime.year, 
  res.eventTime.monthValue - 1, 
  res.eventTime.dayOfMonth, 
  res.eventTime.hour, 
  res.eventTime.minute, 
  res.eventTime.second,
  res.eventTime.nano/1000000
);

alert(d.getTime());

Javascript 不支持纳秒。它只支持高达毫秒的粒度。

此外,月份是0 - 11这样的,你需要为value - 1你的情况下的月份值做。


推荐阅读