顯示具有 格式 標籤的文章。 顯示所有文章
顯示具有 格式 標籤的文章。 顯示所有文章

2013年5月11日 星期六

Calendar,Date與時間

程式中經常會處理到時間的問題。例如:要存取本月份的交易資料,如何指定本月一日零時零分到月底的23時59分59秒之間的資料,光是一個月有幾天就是個大問題。如果用字串不僅格式是問題,時間與時區換算都是問題。只用 Date()也很難處理。
Calendar 再配合 DateFormat 就是一個比較理想的解決方式。

        Calendar cal=Calendar.getInstance();
 int yr=cal.get(Calendar.YEAR);
 int mon=cal.get(Calendar.MONTH);
 int dt=cal.get(Calendar.DAY_OF_MONTH);
  
 cal.set(yr, mon,1,0,0,0);
 startTime=cal.getTimeInMillis();
 cal.add(Calendar.MONTH, 1);
 endTime=cal.getTimeInMillis()-1000;
 SimpleDateFormat format =
 new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");    
 System.out.println(format.format(startTime));
 System.out.println(format.format(endTime));

先用 Calendar 取得現在的時間,找出年月日,再利用它易於處理各種時間換算的特點。
最終,轉成毫秒(或Date )再利用DateFormat( SimpleDateFormat) 轉換輸出您想要的時間格式。

上例的執行結果如下:

 2013/05/01 00:00:00
 2013/05/31 23:59:59

Calendar 的 set 可以很容易的指定時間,如上例中的 cal.set(yr,mon,1,0,0,0); 直接設為當月一日的零時零分零秒。

Calendar 還有 add 可以很快的加(減)一段指定的時間。
   如上例中的 cal.add(Calendar.MONTH, 1);
  
而 SimpleDateFormat 可以輕易指定日期輸出格式,如
SimpleDateFormat format =
 new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");    
 System.out.println(format.format(startTime));
深入研究了解這幾個 Class  之後(Calendar,SimpleDateFormat,Date),就可以對時間的處理操作自如了。

f:convertDateTime 轉換時間格式

f:convertDateTime 通常會被夾在 h:inputText 或者 h:outputText 中,做為轉換日期時間之用。
最好用的屬性就是 pattern 用來指定日期時間格式,把本來的日期長整數,依我們所想要的格式顯示出來。當然,在上例中指出時區,可以更精準的顯示出當地時間。
在未使用 f:convertDateTime  之前 #{log.when}是表示毫秒的長整數

1367407097037

使用後則是 

2013-05-01 07:42:20

很方便不是嗎?