1.问题:
时间格式如何处理?
2.源代码:
public class TestDemo {
public static void main(String[] args){
System.out.println("1.将Date转化成String格式::");
Calendar calendar=Calendar.getInstance();/*建立一个日历,时间默认为当前系统时间*/
System.out.println("Date类时间:"+calendar);
String date1 = DateUtil.formatDateToString(calendar.getTime(), "yyyy-MM-dd HH:mm");/*将时间按"yyyy-MM-dd HH:mm"格式化*/
System.out.println("String类时间:"+date1);
System.out.println();
System.out.println("2.将String转化成Date格式:");
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
try {
/*将String类型的时间date1,转化成Date格式*/
Date date2 = sdf.parse(date1);
System.out.println("Date类型时间:"+date2);
} catch (ParseException e) {
e.printStackTrace();
}
}
}
3.截图:
a、Date类时间转String类型时间:
b、String类型时间转换成Date格式:
4.总结:
a、第一步:
告诉系统你的String的时间,是形如哪种格式的;
这里String转Date格式,是非常容易出错的,因为这里的String格式,必须要是要是形如‘2017-6-21’或者加上时间的‘2017年6月21日11:08’这种格式,具体哪种格式,你要在前面声明一个SimpleDateFormat来告诉系统,这样他才会按照你的格式,给你拆分;
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm");
SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd");
SimpleDateFormat sdf=new SimpleDateFormat("yyyy/MM/dd");
b、第二步:
解析String类型的时间;
这里会报错,如果给你的不是形如yyyy-MM-dd,如果是随便的一个字符串,或者是解析的SimpleDateFormat不一致,就会报错:
这是为什么?
因为如果你传入的是String类型时间,要解析成Date格式;
如果②的类型比①精确,就会报错:“Unparseable date”;
①String:“yyyy-MM-dd”
②SimpleDateFormat:“yyyy-MM-dd HH:mm:ss”;
如果是①的格式比②精确,就没有问题;
①String:“yyyy-MM-dd HH:mm:ss”
②SimpleDateFormat:“yyyy-MM-dd”;
但是,系统会自动把你没有的部分默认为0;这里图中11:22就变成11:00了;