一、Date类和DateFormat类
1、Date
用来描述日期,封装了日期及时间的信息。已被Calendar取代,内部封装了一个毫秒值。
Date date=new Date();
//输出Sat Jun 22 14:51:57 CST 2013
//这是Date类重写了Object的toString()方法
System.out.println(date);
long time = date.getTime();//得到1970年以来的毫秒值
date.setTime(time+24*3600*1000);//设置时间
2、SimpleDateFormat类
用于实现Date对象和字符串表示的日期信息间的转换。构造方法如下:
SimpleDateFormat(String pattern):参数pattern用于说明格式的模式匹配字符串。
如: SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
System.out.println(sdf.format(date));//2013年06月23日
parse转换方法:
和format方法相反,parse方法用于按照特定格式将表示时间的字符串转换为Date对象。
String dateStr = "2013-06-08";
String pattern = "yyyy-MM-dd";
SimpleDateFormat sda = new SimpleDateFormat(pattern);
//如果不匹配这抛出异常
Date dat = sda.parse(dateStr);
System.out.println(date);//Sun Jun 23 15:40:50 CST 2013
3、DateFormat类
DateFormat是SimapleDateFormat的父类,其工厂方法getXXXInstance可以返回 根据地域信息的默认格式的DateFormat对象。
Date d = new Date();
DateFormat df1=DateFormat.getDateInstance(DateFormat.MEDIUM, Locale.US);
System.out.println(df1.format(date));//Jun 23, 2013
DateFormat df2=DateFormat.getDateInstance(DateFormat.MEDIUM, Locale.CHINA);
System.out.println(df2.format(date));//2013-6-23
------------------------------------------------------------------------
二、Calendar类和GregorianCalendar类
1、Calendar
Calendar类用于封装日历信息,其主要作用在于其方法可以对时间分量进行运算。
常用于计算日期,这个类的设计不存在千年虫问题。
Calendar是抽象类,其具体子类针对不同国家的日历系统,其中应用最广泛的是GregorianCalendar(格里高利历),对应世界上绝大多数国家地区使用的标准日历系统。
Calendar c = Calendar.getInstance();
通常使用静态方法来获得对象,是根据系统的地域信息返回不同的Calendar类的实现。
Calendar与简单工厂模式
2、Calendar分量运算
Calendar通过set和get方法对各个时间分量尽心设置及获取。
c.set(Calendar.YEAR,2013);//2013就是时间分量
例子:
/** 使用工厂模式创建一个Calendar实例,该实例代表当前视同时间。*/ Calendar calendar = Calendar.getInstance(); /** 设置日期的方法*/ calendar.set(Calendar.YEAR, 2013); calendar.set(Calendar.MONTH, calendar.MAY); //五月,也可以使用数字,但是都是以0开始,这里就要使用4 //calendar.set(Calendar.MONTH, 4); calendar.set(Calendar.DATE , 15);//第十五天 calendar.set(Calendar.HOUR , 10);//默认是现在是上午还是下午 //calendar.set(Calendar.HOUR_OF_DAY , 10);//使用24小时制就不管上下午 calendar.set(Calendar.MINUTE , 20); calendar.set(Calendar.SECOND , 50); //这样就创建了一个日期 //转换成date日期 Date date = calendar.getTime(); System.out.println(new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss").format(date)); /** 通过Calendar获取对应的时间 */ int month = calendar.get(Calendar.MONTH); int year = calendar.get(Calendar.YEAR); int day = calendar.get(Calendar.DATE); System.out.println("时间是:"+year+"年"+(month+1)+"月"+day+"日"); /** 计算 */ //计算日期统一用add方法,会自动跨年,跨月等等 calendar.add(Calendar.MONTH, 1);//一个月以后的时间,加一个月。 //同理,年,天也一样。如果是减月,用负数。 calendar.add(Calendar.MONTH, -1); calendar.add(Calendar.MONTH,-8); System.out.println(new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss").format(calendar.getTime())); //2012年09月15日 22:20:50 calendar.add(Calendar.DATE,31); System.out.println(new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss").format(calendar.getTime())); //2012年10月16日 22:20:50 calendar.add(Calendar.DATE,360); System.out.println(new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss").format(calendar.getTime())); //2013年10月11日 22:20:50 //自动按照日历累加。 /** 获取指定内容允许的最大值 */ int maxDate = calendar.getActualMaximum(Calendar.DATE); System.out.println(maxDate);//这个月最多有多少天 31 //这一年有多少天 System.out.println(calendar.getActualMaximum(Calendar.DAY_OF_YEAR));