simpleDateFormat parse format

format得到String类型的
parse得到date类型

// 将20120324解析为:2012-03-24
private void parseTime1() {
try {
String time = "20120324";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd");
// SimpleDateFormat的parse(String time)方法将String转换为Date
Date date = simpleDateFormat.parse(time);
simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
// SimpleDateFormat的format(Date date)方法将Date转换为String
String formattedTime = simpleDateFormat.format(date);
System.out.println("---->将" + time + "解析为:" + formattedTime);
} catch (Exception e) {

}

}

// 将20131227085009解析为:2013-12-27 08:50:09
private void parseTime2() {
try {
String time = "20131227085009";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
// SimpleDateFormat的parse(String time)方法将String转换为Date
Date date = simpleDateFormat.parse(time);
simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// SimpleDateFormat的format(Date date)方法将Date转换为String
String formattedTime = simpleDateFormat.format(date);
System.out.println("---->将" + time + "解析为:" + formattedTime);
} catch (Exception e) {

}

}

simpledateformat的parse默认是弱校验的.

比如说如果你的format为"yyyy-MM-dd" ,输入的字串如果是"2013-08-28"能转化正常.

输入的如果是"2013-13-28"则会生成Date:2014-01-28.也就是顺加.

如果希望把"2013-13-28"当做错误格式.则可以设定setLenient(false);

代码如下
复制代码

public class DateTest { 
    public static void main(String[] args) throws ParseException { 
        DateFormat format = new SimpleDateFormat("dd/MM/yyyy"); 
        format.setLenient(false); 
        Date date = format.parse("33/12/2011"); 
        System.out.println(date); 
    } 
}

复制代码

输出结果为:

Exception in thread "main" java.text.ParseException: Unparseable date: "33/12/2011"
at java.text.DateFormat.parse(Unknown Source)
at DateTest.main(DateTest.java:11)

若设置

format.setLenient(false);

则输出结果为

Mon Jan 02 00:00:00 CST 2012
setLenient用于设置Calendar是否宽松解析字符串,如果为false,则严格解析;默认为true,宽松解析。

parse 转换比较奇葩,切模棱两可
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
sdf.parse("2010/11/27");
第二段代码:
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
sdf.parse("fuck2010/11/27");
第一段成功,第二段异常。那么我们来第三段代码:
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
sdf.parse("2010/11/27fuck");
正常运行
parse的字符串并不是全部都用到,只是去parse从前面开始的一部分,还有被解析的长度必须比格式patten长,如下会报异常
String date = "20141201";
SimpleDateFormat sd= new SimpleDateFormat("yyyy-MM-dd");
Date  d = sd.parse(date);
下面则正常
String date = "2014-12-01";
SimpleDateFormat sd= new SimpleDateFormat("yyyyMMdd");
Date  d = sd.parse(date);
System.out.println(d);

你可能感兴趣的:(simpleDateFormat parse format)