2012-02-21 24 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