【问题标题】:High resolution date and time representation in JSON/JavaScriptJSON/JavaScript 中的高分辨率日期和时间表示
【发布时间】:2012-03-11 14:46:08
【问题描述】:

是否有一种可接受的方式来表示 JSON 和/或 JavaScript 中的高分辨率时间戳?

理想情况下,我希望它支持至少 100 ns 的分辨率,因为这会使服务器代码更简单一些(因为 .NET DateTime 的分辨率也是 100 ns)。

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

这是针对使用 JSON 以REST 样式构建的 API,因此实际上在此分辨率下测量时间是不需要的。但是,我想以全分辨率(100 ns,因为这是 .NET)传输和使用(可能在 JavaScript 中)时间戳。

【问题讨论】:

    标签: javascript .net json datetime time


    【解决方案1】:

    根据您的说明,您的时间戳不只是一个非常大的整数吗?当前时间戳为1329826212。如果您想要纳秒精度,我们只是在谈论 9 位以上的数字:1329826212000000000。这是一个 JavaScript 可以轻松处理的数字。只需将其发送为:

    myobject = {
        "time": 1329826212000000000
    }
    

    应该没问题。我只是尝试对其进行一些算术运算,除以大数并乘以相同的数。没有价值损失。

    JavaScript 支持大范围的浮点数,但保证 -2^53 to 2^53 的整数精度。所以我认为你很适合。

    更新 对不起,我刚刚重新阅读了你的问题。你想代表它吗?好吧,我能想到的一件事是提取最后 9 位数字(第二粒度之外的额外精度)并将它们显示为数字的小数部分。您甚至可能希望提取最后 6 位数字(超出毫秒粒度的额外精度)。

    【讨论】:

    • 谢谢,我正在考虑使用一个普通的旧整数,但不确定是否已经有一些普遍认可的解决方案。整数会很好:)
    【解决方案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.combenchmarkjs.com 使用了一个技巧,它使用了一个暴露 Java 纳秒计时器的小型 Java 小程序。

    查看堆栈溢出问题Is there any way to get current time in nanoseconds using JavaScript?

    【讨论】:

    • 这没有回答问题,因为我只需要传输时间戳,而不是实际测量 JavaScript 中的任何内容。也澄清了这个问题。
    • ISO8601 格式是一个很好的解决方案。不过我可能会使用整数,因为它似乎更易于使用,在这种情况下,人类可读性并不重要。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-13
    • 2019-11-19
    • 2011-04-07
    • 1970-01-01
    相关资源
    最近更新 更多