2012-03-28 169 views
0

我有一定的日期和時間值28-3-2012(日期) - 10:36:45(時間)。我希望將這個整個時間戳以納秒的精度轉換爲納秒。因爲在用戶會輸入時間和日期如圖所示,但內部我必須精確到幾納秒,並將整個事情轉換爲納秒,以形成分配給在特定時間創建的特定對象的唯一鍵。 能有一個人,請幫助我一樣..將時間戳轉換爲納秒

+4

將此用作唯一鍵的想法存在根本性缺陷。如果您有多核處理器,則不可能保證在同一時間不會創建兩個對象。 – Jesper 2012-03-28 05:34:31

回答

0

我想最簡單的方法就是使用JDK的支持。嘗試以下

TimeUnit.NANOSECONDS.toNanos(持續時間)

這裏單一參數的持續時間將是你要轉換爲納秒其長期價值。

希望這會有所幫助。

1

,如果您有Date對象:

long nanosecond = date.getTime() * 1000000; 

,或者你可以分析你的時間字符串,如果它看起來像(DD/MM/YYYY HH:MM: SS)

DateFormat df = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss"); 
Date date = df.parse(dateString); 
long nanosecond = date.getTime() * 1000000; 
+0

但是如果在一秒鐘內創建了幾個對象,那麼這會造成一個問題吧?因爲我打算使用這個值作爲存儲在我的對象散列映射中的關鍵。時間粒度必須精確到精確的納秒時間。 – kuki 2012-03-28 05:26:31

+3

@kuki如果原始時間戳只准確到第二個時間(例如28-3-2012 10:36:45),那麼您如何說自己,然後如何你有沒有想過要納秒? – Jesper 2012-03-28 05:32:35

+1

你可以使用System.nanoTime()作爲你想要將密鑰添加到地圖的時間的關鍵,或者在對象中使用任何其他唯一值,例如ID – 2012-03-28 05:42:56

2

樣品日期的精度爲,在long格式的表示是在毫秒單元的值。你可以通過乘以1,000,000將其轉換爲納秒單位

但是,實際上,它只會將九個零附加到原始日期值,而不會添加任何額外的信息您需要創建哈希值。 A Date對象沒有「隱藏的」納秒精度。


Java提供方法System.nanoTime(),它返回一個以納秒爲單位的時間值。但是我們不能把它包裝在一個Date對象中而不會失去精度。不過,它可能有助於創造獨特的「時間價值」。

+1

+1:乘以1,000,000會附加六個零。您不能簡單地將nanoTime轉換爲在Date中使用,因爲它的時間相對於正常運行時間或某個任意點。由於日期存儲很長時間,您不必失去精確度,您就不會有有意義的日期/時間 – 2012-03-28 07:08:24