2012-02-21 63 views
0

是否有可接受的方式来表示JSON和/或JavaScript中的高分辨率时间戳?理想情况下,我希望它支持至少100   ns的分辨率,因为这会使服务器代码更简单一些(因为.NET DateTime分辨率也是100   ns)。JSON/JavaScript中的高分辨率日期和时间表示法

我发现很多问题都涉及操纵高分辨率定时器等(这显然不可能),但我只是需要以某种方式在应用程序API中表示它。

这是建立在使用JSON REST风格的API,所以实际上测量时间在这项决议并不是必需的。但是,我想以全分辨率(100   ns,因为这是.NET)传输和使用(可能使用JavaScript)时间戳。

回答

3

鉴于你的澄清,是不是你的时间戳只是一个非常大的整数?当前时间戳为1329826212。如果你想要纳秒精度,我们只是在谈论像9个更多的数字:1329826212000000000。这是一个JavaScript可以轻松处理的数字。只需发送它:

myobject = { 
    "time": 1329826212000000000 
} 

它应该是非常好的。我只是试着对它进行一些算术运算,除以大数并乘以相同。没有价值损失。

JavaScript支持大量的浮点数,但保证从-2^53 to 2^53的整数精度。所以我觉得你很好走。

UPDATE 对不起,我只是重新读你的问题。你想代表它吗?那么,我能想到的一件事就是提取最后9位数字(超出第二个粒度的附加精度)并将它们显示为数字的小数部分。您甚至可能希望提取最后6个digis(超出毫秒粒度的附加精度)。

+0

谢谢,我正在考虑使用一个普通的旧整数,但不知道是否有一些共同商定的解决方案。整数将做得很好:) – 2012-02-21 12:04:32

2

JavaScript Date object只有毫秒的精度。

不过,如果你只是寻找编码纳秒的精度倍的标准格式,一个ISO 8601 format string将允许您定义纳秒秒的分数:

小数也可以添加到任何的三个时间元素。小数点,逗号或点(没有任何偏好,如2003年第22届大会CGPM第10号决议中最近所述),用作时间元素与其分数之间的分隔符。分数只能添加到表示中的最低阶次时间元素。要表示“14小时30分钟半”,请不要包含秒数。表示为“14:30,5”,“1430,5”,“14:30.5”或“1430.5”。小数部分的小数位数没有限制。但是,小数位数需要通信方同意。


有通过jsperf.com和使用一个小的Java小程序公开Java的纳秒定时器benchmarkjs.com使用的伎俩。

请参阅堆栈溢出问题Is there any way to get current time in nanoseconds using JavaScript?

+1

这不会回答这个问题,因为我只需要传输时间戳,而不是实际测量JavaScript中的任何内容。澄清了这个问题。 – 2012-02-21 09:46:05

+1

ISO8601格式是一个很好的解决方案。尽管如此,我可能会用整数,因为它看起来更简单一些,在这种情况下,人的可读性并不重要。 – 2012-02-21 12:11:54