2015-05-04 134 views

回答

4

你可以嘗試這樣的。

Calendar c = Calendar.getInstance(); //Get current time 
//set miliseconds,seconds,minutes to 0 so we get exactly the hour 
c.set(Calendar.MILLISECOND, 0); 
c.set(Calendar.SECOND, 0); 
c.set(Calendar.MINUTE, 0); 
// This gets the time in milliseconds 
long result=c.getTime().getTime(); 
+0

明白了......你能解釋一下你在做什麼嗎? –

+0

我試圖在編輯中解釋。從當前時間中刪除分鐘/秒/毫秒,然後以毫秒爲單位獲取它 –

+0

@AmitDas他將日曆值設置爲當前系統時間。這還包括時間戳,這就是他將分,秒和毫秒設置爲零的原因。剩下的只是日期+小時,然後他轉換爲長期價值。 – MihaiC

5

與Java 8 ...

LocalDateTime ldt = LocalDateTime.of(2015, Month.MAY, 4, 4, 30); 
ldt = ldt.withMinute(0).withSecond(0).withNano(0); 
long millisSinceEpoch = ldt.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli(); 

的基本思路是採取「時間」零出元素,你不想和結果轉換爲毫秒...

也...

如果你不喜歡打字,你可以使用...

ldt = ldt.truncatedTo(ChronoUnit.HOURS); 

代替ldt = ldt.withMinute(0).withSecond(0).withNano(0)

+0

有一些像喬達的'hourOfDay()。roundFloorCopy()',不是嗎? – shmosel

+0

@shmosel不知道,看看文檔:P – MadProgrammer

+0

@shmosel你可能在['LocalDateTime#truncatedTo']之後(https://docs.oracle.com/javase/8/docs/api/java/ time/LocalDateTime.html#truncatedTo-java.time.temporal.TemporalUnit-) – MadProgrammer

1
Long time = System.currentTimeMillis(); 
time = time/3600000; 
time = time * 3600000; 

或更短的版本:

Long time = (System.currentTimeMillis()/3600000)*3600000; 

注意:3600000 =60分鐘* 60秒*的1000個milisecs。原理:當你做第一個整數除以3600000時,你將「丟失」有關分,秒和毫秒的信息。但結果是幾小時,而不是幾毫秒。讓時間回到毫秒簡單乘以3600000.

乍一看,它可能看起來除以3600000和乘以3600000將相當於「什麼都不做」,但由於整數算術結果是你想要的(擺脫分鐘,秒和毫秒信息)。

1

Joda-Time 2.7,在DateTime對象上調用getMillisOfSecond方法返回int

int millisOfSecond = DateTime.now(DateTimeZone.forID("Africa/Casablanca")).getMillisOfSecond() ; 
相關問題