簡體   English   中英

Java 8中新的Date()。getTime()的等價物

[英]Equivalent of new Date().getTime() in Java 8

在Java 8之前,我在代碼中使用了new Date().getTime()來獲取當前時間戳作為數字。 我可以假設Instant.now().toEpochMilli()與傳統方式相當安全嗎? 它是否具有完全相同的行為和類似的性能特征? 還有更好的選擇嗎?

我想在生態系統中使用Java 8方式,其中所有周圍組件仍然使用new Date().getTime() ,因此生成的結果必須一致。

所有Instant.now().toEpochMilli()new Date().getTime()System.currentTimeMillis()都將為您提供自紀元以來的毫秒數。

從CPU功率和內存分配的角度來看,您應該使用System.currentTimeMillis()因為它是將任務委派給底層操作系統的本機方法(此計算通常非常優化,不需要垃圾回收等)。

兩種選擇

  1. 正如你所說, Instant.now().toEpochMilli()
  2. System.currentTimeMillis()正如Andy Turner和Marteng所說

兩者之間的選擇是品味問題。 InstantDate的現代替代品和許多自然選擇。 如果您想給人一種現代印象,請使用它。 System.currentTimeMillis()Date一樣久。 雖然Date設計非常糟糕,應該始終避免,但我不知道System.currentTimeMillis()有任何設計問題。

更現代:保持即時

使用long來表示某個時間點是非常低級的並且難以調試,因為我們不自然地為該數字賦予任何含義。 如果你能,而不是保持一個數字,保持Instant 它還為您提供了比毫秒更精細的分辨率(因為Java 9 Instant.now()在許多平台上的精度為微秒)。

安全和高效?

我可以假設Instant.now().toEpochMilli()與傳統方式相當安全嗎? 它是否具有完全相同的行為和類似的性能特征?

是的,它是安全且等效的,具有類似的性能特征。

僅在所有情況下都避免使用DateCalendar 它們的設計很差,很久了,並且有現代的替代品。

現在可以使用ZonedDateTime = ZonedDateTime.now() ;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM