将JavaScript日期与毫秒和时区发送到Java WebService



我需要将我的当前日期作为HTTP请求标头发送到基于Java的Web服务,但面对问题,作为JavaScript new Date方法,将其从日期开始将毫秒数据隐藏起来,并将其转发至Web服务。

console.log(new Date())
LOGS - Thu Sep 07 2017 14:47:37 GMT+0530 (India Standard Time)

不存在毫秒信息。但是,我需要在日期类型中,Java Web服务也将其视为日期而不是字符串。我阅读了有关MomentJS格式方法的信息,但这基本上是返回字符串而不是日期。

我需要的是: Thu Sep 07 2017 15:10:46:955GMT+0530 (India Standard Time)

ecmascript日期基于自1970-01-01-01t00:00:00 Z以来为毫秒的时间值,因此它们本质上是UTC。因此返回的值:

new Date().getTime();
// or more concisely
Date.now();

不需要时区,包括毫秒精度。您还可以使用 toisostring ,它返回ISO 8601延长日期,以毫秒为单位,再次使用UTC,例如。2017-09-07T22:51:51.287Z。

ISO格式已被广泛接受,很方便地可读并且是明确的。

但是,如果还要传达源的时区很重要,则可以使用时区偏移量(以几分钟为单位返回以添加到本地时间以获取UTC)并将其格式化为更为标准的东西。

function getISOOffset(date) {
  date = date || new Date();
  function z(n){return ('0'+n).slice(-2)}
  var offset = date.getTimezoneOffset();
  // ECMScript offset sign is the reverse of ISO 8601
  var sign = offset < 0? '+' : '-';
  offset = Math.abs(offset);
  return sign + z(offset/60 | 0) + ':' + z(offset % 60);
}
console.log('The host offset is UTC' + getISOOffset())

如果纯毫秒可以使用,则可以使用类似的东西:

Date.now(); // 1504785573971

这几乎适用于所有现代浏览器。它不会告诉您用户的时区,但确实为您提供了一个一致的数字(自1970年1月1日午夜,GMT,GMT以来)。

对于您所寻求的非常具体的时间戳,您可能需要一个像MONS.JS这样的库 - 这是一个非常重的解决方案,但可以很好地控制格式。

  • moment.js格式化选项

这个将是一个字符串,因为在JSON中没有真正的商定形式。它需要在Java中解析逻辑。我在Java方面没有太多经验,但我相信杰克逊和Gson等受欢迎的图书馆支持这种转换。

如果您不使用JSON将信息提交给服务器,则正常表格提交作为字符串传递,并且必须在服务器上解析。

最新更新