日期操作类(DateFormat、SimpleDateFormat)
本章目标
掌握日期格式化的操作
可以使用SimpleDateFormat进行日期的格式化转换操作
编写取得日期的操作类
DateFormat
在java.util.Date类中实际上取得的时间是一个非常正确的时间。但是因为其显示的格式不理想,所以无法符合国人的喜好,那么实际上此时就可以为此类进行格式化操作,变为符合于中国人的日期格式。
另外要提醒读者的是DateFormat类与MessageFormat类都属于Format类的子类,专门用于格式化数据使用
观察DateFormat中的默认操作
import java.text.DateFormat;
import java.util.Date;
public class DateDemo03 {
public static void main(String[] args) {
DateFormat df1 =null;//声明 DateFormat 类对象
DateFormat df2 =null;//声明 DateFormat 类对象
df1 = DateFormat.getDateInstance();//取得日期
df2 = DateFormat.getDateTimeInstance();//取得日期时间
System.out.println("DATE:"+df1.format(new Date()));//格式化日期
System.out.println("DATETIME:"+df2.format(new Date()));
}
/* 结果:
* DATE:2014-6-18
* DATETIME:2014-6-18 18:57:27
* */
}
指定显示的风格
import java.text.DateFormat;
import java.util.Date;
import java.util.Locale;
public class DateDemo04 {
public static void main(String[] args) {
DateFormat df1 = null;//声明 DateFormat 类对象
DateFormat df2 = null;//声明 DateFormat 类对象
//取得日期,并设置日期显示风格
df1 = DateFormat.getDateInstance(DateFormat.YEAR_FIELD,new Locale("zh","CN"));
//取得日期时间,设置日期的显示格式、时间的显示格式
df2 = DateFormat.getDateTimeInstance(DateFormat.YEAR_FIELD,DateFormat.ERA_FIELD,new Locale("zh","CN"));
System.out.println("DATE:"+df1.format(new Date()));
System.out.println("DATETIME:"+df2.format(new Date()));
}
/* 结果:
* DATE:2014年6月18日
* DATETIME:2014年6月18日 下午07时04分19秒 CST
* */
}
SimpleDateFormat
在项目开发中,会经常将一个日期格式转换为另外一种日期格式,如下所示:
——原日期:2008-10-19 10:11:30.345
——转换后日期:2008年10月19日 10点11分30秒345毫秒
从以上的两个日期可以发现,日期的数字完全一样,只是日期格式有所不同而已,要想实现以上的转换功能就必须使用java.text包中的SimpleDateFormat类完成。
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateDemo05 {
public static void main(String[] args) {
String strDate = "2008-10-19 10:11:30.345";//定义日期时间的字符串
//准备第 1 个模板,从字符串中提取日期数字
String pat1 = "yyyy-MM-dd HH:mm:ss.SSS";
//准备第 2 个模板,将提取后的日期数字变为指定的格式
String pat2 = "yyyy 年 MM 月 dd 日 HH 时 mm 分 ss 秒 SSS 毫秒";
//实例化模式对象
SimpleDateFormat sdf1 = new SimpleDateFormat(pat1);
//实例化模式对象
SimpleDateFormat sdf2 = new SimpleDateFormat(pat2);
Date d = null;
try{
d=sdf1.parse(strDate);//将给定字符串中的日期提取出来
}catch(ParseException e){
e.printStackTrace();//如果提供的字符串格式有错误,则进行异常处理
}
//将日期变为新的格式
System.out.println(sdf2.format(d));
}
/* 结果:
* 2008 年 10 月 19 日 10 时 11 分 30 秒 345 毫秒
* */
}
格式化模板
如果想完成转换,首先必须先定义出一个完整的日期转化模板,模板中通过特定的日期标记可以将一个日期格式中的日期数字提取出来。