[英]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()
因為它是將任務委派給底層操作系統的本機方法(此計算通常非常優化,不需要垃圾回收等)。
Instant.now().toEpochMilli()
System.currentTimeMillis()
正如Andy Turner和Marteng所說 兩者之間的選擇是品味問題。 Instant
是Date
的現代替代品和許多自然選擇。 如果您想給人一種現代印象,請使用它。 System.currentTimeMillis()
與Date
一樣久。 雖然Date
設計非常糟糕,應該始終避免,但我不知道System.currentTimeMillis()
有任何設計問題。
使用long
來表示某個時間點是非常低級的並且難以調試,因為我們不自然地為該數字賦予任何含義。 如果你能,而不是保持一個數字,保持Instant
。 它還為您提供了比毫秒更精細的分辨率(因為Java 9 Instant.now()
在許多平台上的精度為微秒)。
我可以假設
Instant.now().toEpochMilli()
與傳統方式相當安全嗎? 它是否具有完全相同的行為和類似的性能特征?
是的,它是安全且等效的,具有類似的性能特征。
僅在所有情況下都避免使用Date
和Calendar
。 它們的設計很差,很久了,並且有現代的替代品。
你現在可以使用ZonedDateTime = ZonedDateTime.now() ;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.