2015年7月3日 星期五

[Java]日期格式化-SimpleDateFormat

在Java裡面時間轉換格式是一個很麻煩的課題

因為時間的表達方法各種各樣,有些人寫2015/07/03,有些人寫07/03/2015,有些人寫July 03 /2015,麻煩的是07/03到底表示的是三月七號還是七月三號呢?
所以在Java裡面有個class來格式化日期的類別叫SimpleDateFormat
關於格式的設定詳情請看api文件Date and Time Patterns
格式設定的語法大概如下
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd hh:mm:ss");
注意大寫的M代表月份,小寫的m代表的是分鐘

主要的方法有兩個:parse跟format
parse是把字串轉換成日期型態
format是將日期型態轉換成字串

最後特別提一個setLenient方法,他會另外檢查你輸入的值合不合法
預設值是true,改為false的話你輸入15月他會跳出錯誤訊息,如果是true輸入15月或是40日這種他會自動轉成第二年三月或是第二個月10日等等。

以下是範例程式碼

import java.text.ParseException;

import java.text.SimpleDateFormat;

import java.util.Date;





public class DateFormatDemo {



 public static void main(String[] args) throws ParseException {



  SimpleDateFormat sdfor = new SimpleDateFormat("yyyy/MM/dd");

  Date date = sdfor.parse("2015/07/03");

  System.out.println(date);//Fri Jul 03 00:00:00 CST 2015

  System.out.println(sdfor.format(date));//2015/07/03

  

  sdfor = new SimpleDateFormat("yyyy/mm/dd");

  date = sdfor.parse("2015/07/03");

  System.out.println(date);//Sat Jan 03 00:07:00 CST 2015

  

  sdfor = new SimpleDateFormat("yyyy");

  date = sdfor.parse("2015");

  System.out.println(date);//Thu Jan 01 00:00:00 CST 2015

  System.out.println(sdfor.format(date));//2015

  

  sdfor = new SimpleDateFormat("MM月");

  date = sdfor.parse("12月");

  System.out.println(date);//Tue Dec 01 00:00:00 CST 1970

  System.out.println(sdfor.format(date));//12月

  

  

  SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");  

  System.out.println(sdf.parse("1985/15/48"));

  

//  sdf.setLenient(false);

//  System.out.println(sdf.parse("1985/15/48"));//執行會跳exception

 }



}//end of class

沒有留言:

張貼留言