今日分享學習java中Calendar(java.util.Calendar)以及SimpleDateFormat(java.text.SimpleDateFormat)相關的方法,用於格式化日期以及轉換。
參考書籍中敘述原java.util.Date中許多方法已depreciated,經上網查該API確實如此,相關操作日期的方法移到java.util.Calendar,Calendar支援世界上常用的日曆系統,通常使用子類別GregorianCalendar(很難拚),取得時間的方法跟Date中差不多,另提供取得本周第一天(getFirstDayofWeek),取得Time Zone(getTimeZone)等,有用到的時候再查即可。
要格式化日期最簡單的方法應該是使用SimpleDateFormat類別,簡單來說就是把所需的日期格式以字串指定給Constructor,例如yyyy是西元、MM是月份,大小寫意義不同,可詳API Documentation,該類別中的format即實現格式化日期的方法,傳入Date物件(可有Calendar相關方法產生),傳出指定格式之Date物件,parse方法可以用指定之日期格式解析傳入字串,範例如下:
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.Locale;
public class DateFormatter implements Runnable{
private SimpleDateFormat formatter=new SimpleDateFormat("yyyy/MM/dd"); //時間格式1
private SimpleDateFormat formatter2=new SimpleDateFormat("MM/dd/yyyy");//時間格式2
private static final String dt="09/21/2012";//預設要轉換的日期
public String getTime(){ //取得現在幾時幾分幾秒
Calendar cal= new GregorianCalendar(); //取得GregorianCalendar物件
int hour= cal.get(Calendar.HOUR_OF_DAY); // get 現在時間(幾時)
int minute=cal.get(Calendar.MINUTE); // get 現在時間(幾分)
int second=cal.get(Calendar.SECOND); // get 現在時間(幾秒)
return addZero(hour)+":"+addZero(minute)+":"+addZero(second);
}
@Override
public void run() {
// TODO Auto-generated method stub
while(true){
System.out.println(getTime()); //現在幾時幾分幾秒
System.out.println(Calendar.getInstance(Locale.TAIWAN).getTime());
//現在完整時期格式,Calendar類別可指定Time Zone
System.out.println(formatter.format(Calendar.getInstance(Locale.TAIWAN).getTime()));
//呼叫SimpleDateFormat中的format方法,將傳入的時間(Date)以指定的格式傳回
try {
System.out.println(formatter.format(formatter2.parse(dt)));
//轉換日期格式:
//SimpleDateFormat中的parse方法可以將傳入的字串以指定格式解析後傳回Date物件
//再使用format方法即可轉換成指定格式
} catch (ParseException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
try{
Thread.sleep(1000);
}catch(InterruptedException e){
e.printStackTrace();
}
}
}
public String addZero(int number){ //數字小於10補0
return number<10 ? "0"+number : ""+ number;
}
}