我正在研究Java7項目,我們需要國際原子時間的時間戳。我發現關於這一點,點JSR-310和ThreeTen項目(這是實施JSR-310),其他幾個問題:如何在Java中獲取國際原子時間7
How to get GPS Time and TAI time in Java?
http://www.coderanch.com/t/549178/java/java/TAI-Atomic-Time-International
不過,我掙扎確切地說明Java 7的用途以及從哪裏獲得它。似乎有ThreeTen的舊SourceForge & GitHub頁面,以及一個OpenJDK頁面。我已經找到了Java 7的backport,但是在從Maven下載它之後,它不包含TAIInstant類,這是我真正需要的(TIAInstant類在javax.time下的ThreeTen SourceForge JavaDoc中列出) .TAIInstant)。
爲了完整,這是從我的pom.xml摘錄:
<dependency>
<groupId>org.threeten</groupId>
<artifactId>threetenbp</artifactId>
<version>0.8.1</version>
</dependency>
我應該使用別的東西,並在那裏我應該從得到它?
注意:對不起,我無法提供指向所有網頁的鏈接,但StackOverflow不會讓我在沒有更高代表的情況下每個帖子有> 2個鏈接。
[編輯] 原因希望TAI是,我需要一個時間戳這是單調遞增的,這一點我相信TAI滿足(即使在正&負閏秒,因爲它
不關心的飛躍秒數
平均計數所有秒,包括閏秒)。
從各種來源閱讀了關於POSIX/Unix時間的信息後,我仍然不清楚Unix時代閏秒會發生什麼。我知道Unix時間在引用UTC時間方面是不明確的,但我不清楚在閏秒發生的瞬間Unix時間會發生什麼?例如,Unix時間「暫停」還是倒退?也許更重要的是,即使它不應該按照Unix時間規範,Unix的實現是否真的服從關於閏秒的規範......?
最後,我正確地說System.currentTimeMillis()會得到相當於POSIX時間(儘管以毫秒爲單位而不是秒)?
注意,我需要一個可移植到JVM和機器上的對象(排除System.nanoTime()或類似)。
[結論]
TAI
TAI是,每一個第二計數和「所有秒等於」測量時間的系統 - 即每秒鐘由相同的時間段組成,並且所有秒(包括閏秒)在總數中計數。這意味着TAI中的秒數(從某個任意起始點開始計算,例如Unix Epoch)是一個單調遞增的整數。
POSIX時間
POSIX時間是用於測量時間的標準(NOT一個實現)。它每天定義爲正好有86400秒。因此,POSIX時間不計算閏秒(因爲偶爾一分鐘可能有61秒,導致日期> 86400秒,理論上每分鐘可能有59秒,導致日期爲< 86400秒)。這意味着POSIX中的「秒」具有可變長度,並且在閏秒之前/之中/之後,POSIX時鐘可能會跳過秒或重複它們。具體而言,Meno Hochschild在他的回答中引用的POSIX規範指出:「實際時間與自Epoch未指定以來秒數的當前值之間的關係」。
UTC
UTC是它與地球繞太陽運動的方式,目的是保持太陽的位置和一天中的時間(閾值之內)之間的關係的時間標準。即在地球的UTC + 0地區,太陽始終處於世界時UTC時的最高點。閏秒(正面或負面)是必要的,因爲地球自轉的速度不是固定的,並且不會以可預測的方式變化(這意味着我們無法預測何時需要閏秒 - 或者它們是正閏秒還是閏秒負閏秒)
代表時報
這在我看來,TAI和POSIX無一不是「秒計數」表示(即東西容易對計算機的實際存儲),而UTC是一個「人時間(即年/月/日小時:分鐘:秒。毫秒)的「解釋」,通常不存儲在計算機內部。
翻譯時報
鑑於上述情況,有許多的從POSIX平移問題(不計任何閏秒)至TAI(與閏秒計算):
- 它需要維持表/計數閏秒翻譯任何POSIX時間到TAI時間
- 即使點1被解決,上述POSIX規格不能保證期間會發生什麼閏秒,所以在這樣的時候,我們沒有準確表示的方式nting明確的時間
- 如果多個系統必須溝通,通過他們之間的時間戳,我們必須保證閏秒錶/計數保持一致
在另一方面,很容易轉換從POSIX到UTC的「人類解讀」。它不需要知道閏秒,因爲它假設每天都有相同的秒數(儘管其中的某些「秒」在現實中具有不同的時間長度)。實際上,您只需使用POSIX Spec中公式的反函數即可獲得各種UTC時間分量(再次參見Meno Hochschild引用的POSIX規範)。
[ThreeTen的SourceForge](http://sourceforge.net/apps/mediawiki/threeten/index.php?title=ThreeTen) [ThreeTen GitHub的](http://threeten.github.io/) [ThreeTen的OpenJDK](http://openjdk.java.net/projects/threeten/) [javax.time.TAIInstant的Javadoc上SourceForge](http://threeten.sourceforge.net/apidocs/index.html?javax/time/TAIInstant.html) – asibs
糾正並解釋了更多。希望能幫助到你。 –