java中的日期处理类总结:Date/Calendar/GregorianCalendar/DateFormat/SimpleDateFormat 类今天花了好大一点时间把java的日期类做了一下整理,哈1、Date类(该类现在很少用了)l Date类对象的创建:n 创建一个当前时间//默认是创建一个代表系统当前日期的Date对象Date d = new Date();n 创建一个我们指定的时间的Date对象:下面是使用带参数的构造方法,可以构造指定日期的Date类对象,Date类中年份的参数应该是实际需要代表的年份减去1900,实际需要代表的月份减去1以后的值。
//创建一个代表2009年6月12号的Date对象Date d1 = new Date(2009-1900, 6-1, 12); (注意参数的设置啊!)l 正确获得一个date对象所包含的信息如:Date d2 = new Date(2009-1900, 6-1, 12);//获得年份(注意年份要加上1900,这样才是日期对象d2所代表的年份)int year = d2.getYear() + 1900;//获得月份(注意月份要加1,这样才是日期对象d2所代表的月份)int month = d2.getMonth() + 1;//获得日期int date = d2.getDate();//获得小时int hour = d2.getHours();//获得分钟int minute = d2.getMinutes();//获得秒int second = d2.getSeconds();//获得星期(注意:0代表星期日、1代表星期1、2代表星期2,其他的一次类推了)int day = d2.getDay();运行结果:年份:2009月份:6日期:12小时:0 //不设置默认是0分钟:0 //不设置默认是0秒:0 //不设置默认是0星期:5 //09-6-12今天就是星期5,又是一个星期天哦2、Calendar类Calendar类的功能要比Date类强大很多,而且在实现方式上也比Date类要复杂一些l Calendar类对象的创建Calendar类是一个抽象类,在实际使用时实现特定的子类的对象。
由于Calendar类是抽象类,且Calendar类的构造方法是protected的,所以无法使用Calendar类的构造方法来创建对象,API中提供了getInstance方法用来创建对象。
n 创建一个代表系统当前日期的Calendar对象Calendar c = Calendar.getInstance();//默认是当前日期n 创建一个指定日期的Calendar对象使用Calendar类代表特定的时间,需要首先创建一个Calendar的对象,然后再设定该对象中的年月日参数来完成。
//创建一个代表2009年6月12日的Calendar对象Calendar c1 = Calendar.getInstance();c1.set(2009, 6 - 1, 12);l Calendar类对象字段类型Calendar类中用一下这些常量表示不同的意义,jdk内的很多类其实都是采用的这种思想Calendar.YEAR——年份Calendar.MONTH——月份Calendar.DATE——日期Calendar.DAY_OF_MONTH——日期,和上面的字段意义完全相同Calendar.HOUR——12小时制的小时Calendar.HOUR_OF_DAY——24小时制的小时Calendar.MINUTE——分钟Calendar.SECOND——秒Calendar.DAY_OF_WEEK——星期几l Calendar类对象信息的设置与获得n Calendar类对象信息的设置u Set设置如:Calendar c1 = Calendar.getInstance();调用:public final void set(int year,int month,int date)c1.set(2009, 6 - 1, 12);//把Calendar对象c1的年月日分别设这为:2009、6、12利用字段类型设置如果只设定某个字段,例如日期的值,则可以使用如下set方法:调用:public void set(int field,int value)//把c1对象代表的日期设置为10号,其它所有的数值会被重新计算c1.set(Calendar.DATE,10);//把c1对象代表的年份设置为2008年,其他的所有数值会被重新计算c1.set(Calendar.YEAR,2008);其他字段属性set的意义以此类推u Add设置Calendar c1 = Calendar.getInstance();//把c1对象的日期加上10,也就是c1所表的日期的10天后的日期,其它所有的数值会被重新计算c1.add(Calendar.DA TE, 10);//把c1对象的日期加上10,也就是c1所表的日期的10天前的日期,其它所有的数值会被重新计算c1.add(Calendar.DA TE, -10);其他字段属性的add的意义以此类推n Calendar类对象信息的获得Calendar c1 = Calendar.getInstance();// 获得年份int year = c1.get(Calendar.YEAR);// 获得月份int month = c1.get(Calendar.MONTH) + 1;// 获得日期int date = c1.get(Calendar.DATE);// 获得小时int hour = c1.get(Calendar.HOUR_OF_DAY);// 获得分钟int minute = c1.get(Calendar.MINUTE);// 获得秒int second = c1.get(Calendar.SECOND);// 获得星期几(注意(这个与Date类是不同的):1代表星期日、2代表星期1、3代表星期二,以此类推)int day = c1.get(Calendar.DAY_OF_WEEK);3、GregorianCalendar类GregorianCalendar 是Calendar 的一个具体子类,提供了世界上大多数国家使用的标准日历系统。
GregorianCalendar类对象的创建GregorianCalendar有自己的构造方法,而其父类Calendar没有公开的构造方法哦。
GregorianCalendar()在具有默认语言环境的默认时区内使用当前时间构造一个默认的GregorianCalendar。
GregorianCalendar(int year, int month, int dayOfMonth)在具有默认语言环境的默认时区内构造一个带有给定日期设置的GregorianCalendar。
GregorianCalendar(int year, int month, int dayOfMonth, int hourOfDay, int minute)为具有默认语言环境的默认时区构造一个具有给定日期和时间设置的GregorianCalendar。
GregorianCalendar(int year, int month, int dayOfMonth, int hourOfDay, int minute, int second) 为具有默认语言环境的默认时区构造一个具有给定日期和时间设置的GregorianCalendar。
创建一个代表当前日期的GregorianCalendar对象GregorianCalendar gc = new GregorianCalendar();//创建一个代表2009年6月12日的GregorianCalendar对象(注意参数设置哦,与其父类是一样的哦,月份要减去1)GregorianCalendar gc = new GregorianCalendar(2009,6-1,12);字段属性什么的都是随其父Calendar了,呵另外:GregorianCalendar有下面一个方法:isLeapYear(int year)确定给定的年份是否为闰年4、DateFormat类DateFormat 是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化并分析日期或时间。
日期/时间格式化子类(如SimpleDateFormat)允许进行格式化(也就是日期-> 文本)、分析(文本-> 日期)和标准化。
将日期表示为Date 对象,或者表示为从GMT(格林尼治标准时间)1970 年,1 月1 日00:00:00 这一刻开始的毫秒数。
5、SimpleDateFormat类public class SimpleDateFormat extends DateFormatSimpleDateFormat 是一个以与语言环境相关的方式来格式化和分析日期的具体类。
它允许进行格式化(日期-> 文本)、分析(文本-> 日期)和规范化。
所以本类可以实现:String 到Date Date到String的互转,如下:SimpleDateFormat对象最常用的就是一下两招了://注意构造函数中是SimpleDateFormat类解析日期的模式,大小写代表的意义完全不一样哦SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");//日期到字符串的转换String today = df.format(new Date());//字符串到日期的转换Date date = df.parse("2009-06-12 02:06:37");System.out.println(df.format(new Date()));6、日期类对象之间的互转l Date类对象与long型时间的互转//将Date类的对象转换为long型时间Date d= new Date();//使用对象的getTime()方法完成long dLong = d.getTime();//将long型时间转换为Date类的对象long time = 1290876532190L;//使用Date的构造方法完成Date d2 = new Date(time);l Calendar对象和long型时间之间的互转// 将Calendar对象转换为相对时间Calendar c = Calendar.getInstance();long t1 = c.getTimeInMillis();// 将相对时间转换为Calendar对象Calendar c1 = Calendar.getInstance();long t = 1252785271098L;c1.setTimeInMillis(t1);l Calendar对象和Date对象之间的互转// 将Calendar对象转换为相对时间Calendar c = Calendar.getInstance();Date d = c.getTime();// 将相对时间转换为Calendar对象Calendar c1 = Calendar.getInstance();Date d1 = new Date();//通过setTime()方法后,日历c1所表示的日期就d1的日期c1.setTime(d1);7、Ok,利用以上各个类的功能,我们可以很简单的实现一些时间计算的功能哦,呵呵,下面看几个方法:l 判断是否是闰年/*** 给定一个年份判断该年份是否为闰年create date:2009-6-10 author:Administrator** @param year* @return*/public static boolean isLeapYear(int year) {GregorianCalendar calendar = new GregorianCalendar();return calendar.isLeapYear(year);}l 获取当前日期的字符串表示形式/*** 利用SimpleDateFormat获取当前日期的字符串表示形式格式:2009-55-05** create date:2009-6-5 author:Administrator** @return*/public static String getCurrentDate() {// 注意SimpleDateFormat("yyyy-MM-dd")的参数间隔符号可以随意设置的,如:// yyyy年MM月dd日返回格式:2009年06月09日// yyyy-MM-dd 返回格式:2009-06-09// SimpleDateFormat dateFormat = new SimpleDateFormat(// "yyyy-MM-dd HH:mm:ss");SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");return dateFormat.format(System.currentTimeMillis());}l 给出任意一个年月日得到该天是星期几/*** 给出任意一个年月日得到该天是星期几create date:2009-6-10 author:Administrator ** @param date* 参数格式2009-6-10* 返回值:0 代表星期日,1代表星期1,2代表星期2,以此类推*/public static int getWeek(String date) {// 注意参数的大小写格式SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");Calendar c = Calendar.getInstance();try {Date d = dateFormat.parse(date);c.setTime(d);} catch (ParseException e) {}return c.get(Calendar.DAY_OF_WEEK)-1;}l 获得今天n天以后或者n天以前是那一天/*** 获得距离今天n天的那一天的日期create date:2009-6-11 author:Administrator ** @param day* @return*/public static String getDistanceDay(int day) {Calendar calen = Calendar.getInstance();calen.add(Calendar.DAY_OF_MONTH, day);Date date = calen.getTime();// 这里也个用SimpleDateFormat的format()进行格式化,然后以字符串形式返回格式化后的dateSimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");return dateFormat.format(date);}l 获得距离指定日期n天的那一天的日期/*** 获得距离指定日期n天的那一天的日期create date:2009-6-11 author:Administrator** @param date* 格式:2009-6-11* @param day* @return*/public static String getDistanceDay(String date, int day) {SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");Date d;Calendar c =Calendar.getInstance();try {d = dateFormat.parse(date);c.setTime(d);c.add(Calendar.DA TE, day);} catch (ParseException e) {// TODO Auto-generated catch blocke.printStackTrace();}return dateFormat.format(c.getTime());}/*** 获得给定两个日期相差度天数* create date:2009-6-23 author:Administrator** @param date1* 参数格式:2009-06-21* @param date2*/public static long getGapDays(String date1, String date2) {String[] d1 = date1.split("-");String[] d2 = date2.split("-");Calendar c = Calendar.getInstance();c.set(Integer.parseInt(d1[0]), Integer.parseInt(d1[1]), Integer.parseInt(d1[2]), 0, 0, 0);long l1 = c.getTimeInMillis();c.set(Integer.parseInt(d2[0]), Integer.parseInt(d2[1]), Integer.parseInt(d2[2]), 0, 0, 0);long l2 = c.getTimeInMillis();return (Math.abs(l1 - l2) / (24 * 60 * 60 * 1000));}本文来自CSDN博客,转载请标明出处:/shibenjie/archive/2009/06/12/4263912.aspx。