TL;博士
myGregCal.toZonedDateTime().toEpochSecond() // Convert from troublesome legacy `GregorianCalendar` to modern `ZonedDateTime`.
和去另一個方向......
GregorianCalendar.from( // Convert from modern `ZonedDateTime` to troublesome legacy class `GregorianCalendar`.
Instant.ofEpochSecond(yourCountOfWholeSecondsSinceEpoch) // Moment in UTC.
.atZone( // Apply `ZoneId` to `Instant` to produce a `ZonedDateTime` object.
ZoneId.of("Africa/Tunis")
)
)
避免遺留日期時類
其他的答案是正確的,較短。但是,僅供參考,麻煩的舊日期,時間類,如java.util.Date
,java.util.Calendar
和java.text.SimpleDateFormat
現在legacy,通過內置到Java的java.time類取代8 &的Java 9.
因此,這裏是如何轉換和運用現代類而不是你的問題。從傳統類GregorianCalendar
java.time
轉換爲現代級ZonedDateTime
。調用添加到舊類的新方法。
ZonedDateTime zdt = myGregCal.toZonedDateTime() ;
和去另一個方向......
GregorianCalendar myGregCal = GregorianCalendar.from(zdt) ;
如果「Unix time」你的意思是全秒的計數自UTC 1970年第一時刻的epoch reference,1970-01-01T00:00:00Z ,然後致電toEpochSecond
。
long secondsSinceEpoch = zdt.toEpochSecond() ;
如果你的意思是毫秒的數量自1970年以來開始在UTC,然後提取Instant
。 Instant
類表示UTC中的時間軸上的一個時刻,分辨率爲nanoseconds(小數點後最多九(9)位數字)。
Instant instant = zdt.toInstant() ;
現在ask for the count of milliseconds。
long millisecondsSinceEpoch = instant.toEpochMill() ;
請記住,詢問整秒或milliseconds可能涉及數據丟失。 ZonedDateTime
和Instant
都解析爲納秒。所以任何microseconds或納秒可能會出現將被忽略,因爲你計算你的整個秒或毫秒。
關於java.time
的java.time框架是建立在Java 8和更高版本。這些類代替了日期時間類legacy,如java.util.Date
,Calendar
,& SimpleDateFormat
。
Joda-Time項目,現在在maintenance mode,建議遷移到java.time類。請參閱Oracle Tutorial。並搜索堆棧溢出了很多例子和解釋。規格是JSR 310。
使用JDBC driver與JDBC 4.2或更高版本兼容的,你可以交換java.time直接對象與數據庫。不需要字符串和java.sql。*類。
從何處獲取java.time類?
的ThreeTen-Extra項目與其他類擴展java.time。這個項目是未來可能增加java.time的一個試驗場。您可以在這裏找到一些有用的類,如Interval
,YearWeek
,YearQuarter
和more。
+1對於喬達時間 – 2010-10-25 20:31:11
嘿謝謝。我只需要你寫的代碼。非常感謝! – androidNoob 2010-10-25 20:34:48
從什麼時候unix時間沒有毫秒? – Pacerier 2012-01-18 13:33:54