2013-02-23 83 views
1

關於如何修改以下代碼段以使其適用於季度和半小時的時間間隔的任何想法?如何將時間四捨五入到最近的四分之一和半小時的時間間隔?

import java.util.Calendar; 
import java.util.Date; 
import org.apache.commons.lang.time.DateFormatUtils; 
import org.apache.commons.lang.time.DateUtils; 
import org.apache.commons.lang.time.FastDateFormat; 

public class DateRounding { 
    public static void main(String[] args) { 
     FastDateFormat formatter = DateFormatUtils.ISO_DATETIME_TIME_ZONE_FORMAT; 

     Date now = new Date(); 
     System.out.println("now = " + formatter.format(now));  

     // Get nearest second 
     Date nearestSecond = DateUtils.round(now, Calendar.SECOND); 
     System.out.println("nearestSecond = " + formatter.format(nearestSecond)); 

     // Get nearest minute 
     Date nearestMinute = DateUtils.round(now, Calendar.MINUTE); 
     System.out.println("nearestMinute = " + formatter.format(nearestMinute)); 

     // Get nearest hour 
     Date nearestHour = DateUtils.round(now, Calendar.HOUR); 
     System.out.println("nearestHour = " + formatter.format(nearestHour)); 
    } 
} 

回答

0

一個季度是15分鐘= 15 * 60 * 1000毫秒。您可以將其中一半添加到Date的長整數值中,再除以它並再乘。

同樣的一個半小時。

也許你甚至可以做

DateUtils.round(now, 15*60*1000); 

爲此,諮詢API doc

+0

嗨!謝謝!然而,第一種解決方案的工作原理可能是請你幫助我解決第二個問題,即DateUtils.round(現在的15 * 60 * 1000);因爲它看起來更緊湊和優雅?目前,後者根本不起作用。 – user706838 2013-02-23 19:52:27

+0

@eualin - 不知道DateUtils API,但我認爲round的第二個參數是一個毫秒數。在這種情況下,Calendar.SECOND將是1000,Calendar.Minute 60000等等。也許你甚至可以寫'15 * Calendar.MINUTE'。但是這應該在API文檔中 - 您可以**閱讀您使用的API的文檔,是嗎? – Ingo 2013-02-23 19:56:03

+0

非常感謝答案,但'15 * Calendar.MINUTE'也不起作用?任何想法? – user706838 2013-02-23 20:31:41

相關問題