Date类和Calendar类

在JDK1.0中,Date类是唯一的一个代表时间的类,但是由于Date类不便于实现国际化,所以从JDK1.1版本开始,推荐使用Calendar类进行时间和日期处理

1、获取当前系统时间

使用Date类的默认构造方法创建出的对象就代表当前时间,由于Date类覆盖了toString方法,所以可以直接输出Date类型的对象

由于Calendar类是抽象类,且Calendar类的构造方法是protected的,所以无法使用Calendar类的构造方法来创建对象,API中提供了getInstance方法用来创建对象。
使用该方法获得的Calendar对象就代表当前的系统时间,由于Calendar类toString实现的没有Date类那么直观,所以直接输出Calendar类的对象意义不大。

<pre name="code" class="java">    @Test
    public void testNewDate(){
        Date date = new Date();
        System.out.println(date);

        Calendar calendar = Calendar.getInstance();
        Date date1 = calendar.getTime();
        System.out.println(date1);
    }

 两者结果都为:Sun Mar 17 15:49:46 CST 2016在该格式中,Sun代表Sunday(周日),Mar代表March(三月),17代表17号,CST代表China Standard Time(中国标准时间,也就是北京时间(东八区))。 
 

2、设置指定的时间

Date类设置指定时间的方法:Date date = new Date(2009-1900,3-1,9);  //2009年3月9号。

实际代表具体的年月日时分秒的日期对象,和这个类似。

Calendar类设置指定时间的方法:

Calendar c1 = Calendar.getInstance();c1.set(2009, 3 - 1, 9); //2009年3月9日

如果只设定某个字段,例如日期的值,则可以使用如下set方法:public void set(int field,int value)例如:c1.set(Calendar.DATE,10);该代码的作用是将c1对象代表的时间中日期设置为10号,其它所有的数值会被重新计算,例如星期几以及对应的相对时间数值等。

3、获得Date/Calendar对象中的信息

Date类与Caledar类都中使用对应的get方法,可以获得相关的信息,但Date类这些方法已经不建议使用了

    @Test
    public void testDate(){
        Date date = new Date();
        //getYear获得是Date对象中年份减去1900以后的值,所以需要在返回值的基础上加上1900
        int year = date.getYear() + 1900;
        //月份为实际的月份值减1,与Calendar类相同
        int month = date.getMonth() + 1;

        System.out.println("年份:" + year);
        System.out.println("月份:" + month);
        System.out.println("日期:" + date.getDate());

        System.out.println("小时:" + date.getHours());
        System.out.println("分钟:" + date.getMinutes());
        System.out.println("秒:" + date.getSeconds());

        //Date类规定周日是0,周一是1,周二是2,后续的依次类推。
        System.out.println("星期:" + date.getDay());
    }

    @Test
    public void testCalendar(){
        Calendar calendar = Calendar.getInstance();
        //月份为实际的月份值减1,与Date相同
        int month = calendar.get(Calendar.MONTH) + 1;
        //在Calendar类中,周日是1,周一是2,周二是3,依次类推。
        int day = calendar.get(Calendar.DAY_OF_WEEK) - 1;

        System.out.println("年份:" + calendar.get(Calendar.YEAR));
        System.out.println("月份:" + month);
        System.out.println("日期(也就是多少号):" + calendar.get(Calendar.DATE));
        System.out.println("24小时制的小时数:" + calendar.get(Calendar.HOUR_OF_DAY));
        System.out.println("12小时制的小时数:" + calendar.get(Calendar.HOUR));
        System.out.println("分钟:" + calendar.get(Calendar.MINUTE));
        System.out.println("秒:" + calendar.get(Calendar.SECOND));
        System.out.println("星期:" + day);
    }

4、Date对象/Calender和相对时间之间的互转

使用Date对象中的getTime方法,可以将Date类的对象转换为相对时间;
使用Date类的构造方法,可以将相对时间转换为Date类的对象

    @Test
    public void test(){
        //将Date类的对象转换为相对时间
        Date date = new Date();
        long t1 = date.getTime();
        System.out.println(t1);

        //将相对时间转换为Date类的对象
        long time = 1290876532190L;
        Date d1 = new Date(time);
        System.out.println(d1);
    }

    @Test
    public void test(){
        //将Calendar对象转换为相对时间
        Calendar calendar = Calendar.getInstance();
        long t1 = calendar.getTimeInMillis();
        System.out.println(t1);

        //将相对时间转换为Calendar对象
        long time = 1252785271098L;
        Calendar c1 = Calendar.getInstance();
        c1.setTimeInMillis(time);
        System.out.println(c1.getTime());
    }

4、其它方法

4.1、public boolean after(Object when)

该方法的作用是判断当前日期对象是否在when对象的后面,如果在when对象的后面则返回true,否则返回false

    @Test
    public void testAfter(){
        Date date = new Date();

        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        Date date1 = new Date();

        System.out.println(date1.after(date));//true
    }
同理public boolean before(Date when):该方法是判断当前日期对象是否位于另外一个日期对象之前

你可能感兴趣的:(java,Date,calendar)