2010-10-25 67 views

回答

26

的方法getTimeInMillis()setTimeInMillis(long)會讓你獲取和設置以毫秒爲單位的時間,這是UNIX時間乘以1000,您將需要手動調整,因爲Unix的時間不包括毫秒 - 只有幾秒鐘。

 
long unixTime = gregCal.getTimeInMillis()/1000; 
gregCal.setTimeInMillis(unixTime * 1000); 

除了:如果您使用日期的很多應用程序,特別是如果你正在轉換日期或使用多個時區,我會強烈建議使用JodaTime庫。它比Java自帶的Calendar系統更完整,更自然。

+0

+1對於喬達時間 – 2010-10-25 20:31:11

+0

嘿謝謝。我只需要你寫的代碼。非常感謝! – androidNoob 2010-10-25 20:34:48

+0

從什麼時候unix時間沒有毫秒? – Pacerier 2012-01-18 13:33:54

0

Calendar.getTimeInMillis()應該是你在找什麼。

0

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.Datejava.util.Calendarjava.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,然後提取InstantInstant類表示UTC中的時間軸上的一個時刻,分辨率爲nanoseconds(小數點後最多九(9)位數字)。

Instant instant = zdt.toInstant() ; 

現在ask for the count of milliseconds

long millisecondsSinceEpoch = instant.toEpochMill() ; 

請記住,詢問整秒或milliseconds可能涉及數據丟失。 ZonedDateTimeInstant都解析爲納秒。所以任何microseconds或納秒可能會出現將被忽略,因爲你計算你的整個秒或毫秒。


關於java.time

java.time框架是建立在Java 8和更高版本。這些類代替了日期時間類legacy,如java.util.Date,Calendar,& SimpleDateFormat

Joda-Time項目,現在在maintenance mode,建議遷移到java.time類。請參閱Oracle Tutorial。並搜索堆棧溢出了很多例子和解釋。規格是JSR 310

使用JDBC driverJDBC 4.2或更高版本兼容的,你可以交換java.time直接對象與數據庫。不需要字符串和java.sql。*類。

從何處獲取java.time類?

ThreeTen-Extra項目與其他類擴展java.time。這個項目是未來可能增加java.time的一個試驗場。您可以在這裏找到一些有用的類,如Interval,YearWeek,YearQuartermore