2013年1月15日 星期二

Java 日期 Parse. DateFormat.setLenient

一般使用 Java 從字串轉成日期,通常會使用 SimpleDataFormat 做轉換。

例如:

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;


public class DataSample {
 
   public static void main(String[] args) {
      SimpleDateFormat sdf = new SimpleDateFormat();
      sdf.applyPattern("MM/dd/yyyy") ;
      try {
         Date d = sdf.parse("01/17/2013") ;
         System.out.println(d) ;
      } catch (ParseException e) {
        e.printStackTrace();
      }
   }
}

會得到
Thu Jan 17 00:00:00 CST 2013

這是再自然不過了。
但是如果你不小心給錯格式,那會怎樣? 例如 MM/dd/yyyy 給成了 yyyy/MM/dd , 你猜會怎樣?

答案會 beyond imagination 。直覺應該會出錯,但不會,而且會有一個日期跑出來!!!

Tue Sep 01 00:00:00 CST 184

哪怎麼辦?
在 DateFormat 有一個 method , 可以解決此問題。 setLenient
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;


public class DataSample {
 
   public static void main(String[] args) {
      SimpleDateFormat sdf = new SimpleDateFormat();
      sdf.applyPattern("MM/dd/yyyy") ;
      sdf.setLenient(false);
      try {
         Date d = sdf.parse("2013/01/17") ;
         System.out.println(d) ;
      } catch (ParseException e) {
         e.printStackTrace();
      }
   }
}

會得到
java.text.ParseException: Unparseable date: "2013/01/17"
 at java.text.DateFormat.parse(DateFormat.java:357)
 at DataSample.main(DataSample.java:13)


沒有留言: