Date类与Calendar类

Date类与Calendar类一、Date类1、认识Date类 java.util包下的Date类,Date对象既包含日期,该类从JDK1.0就开始有了,所以大部分的构造器和方法已经过时,编写时有时会报错。Date类一共有6个构造器,其中4个已经Deprecated,剩余两个如下:2、构造器Date():生成一个代表当前日期时间的Date对象,该构造器在底层调用System.currentTimeMilli…

大家好,欢迎来到IT知识分享网。

一、Date类

1、认识Date类

 java.util包下的Date类,Date对象既包含日期,该类从JDK1.0就开始有了,所以大部分的构造器和方法已经过时,编写时有时会报错。

Date类一共有6个构造器,其中4个已经Deprecated,剩余两个如下:

2、构造器

Date():生成一个代表当前日期时间的Date对象,该构造器在底层调用System.currentTimeMillis()获得long整数作为日期参数。

Date(long date):根据一个指定的long型整数来生成一个Date对象。参数表示将创建的Date对象和GMT 1970.1.1 00:00:00之间的时间差,单位毫秒。

3、方法:

boolean after(Date when): 测试该时期是否在指定日期when之后。

boolean before(Date when) : 测试该日期是否在指定日期when之前。

long getTime() : 返回该时间对应的long型整数,即从GMT 1970.1.1 00:00:00到该Date对象之间的时间差,单位毫秒。

void setTime(long time) : 设置该Date对象的时间。

compareTo(Date when) : 测试的Date在指定的Date之前返回小于0的数,之后,返回大于0的数,相等,返回0。

4、java实现:

import java.util.Date;

public class DateTest {
    public static void main(String[] args){
        Date d1 = new Date();
        //获取当前时间之后1min的时间
        Date d2 = new Date(System.currentTimeMillis() + 10000*6);
        System.out.println(d1);
        System.out.println(d2);
        //测试的Date在指定的Date之前返回小于0的数,之后,返回大于0的数,相等,返回0
        System.out.println(d1.compareTo(d2));
        System.out.println(d1.before(d2));
        d1.setTime(d2.getTime());
        System.out.println(d1);
        System.out.println(d2);
    }
}

结果:

Date类与Calendar类

 

二、Calendar类

Calendar类和Date一样是获得日期的工具类,不过,Calendar类不允许实例化,只能通过封装好的静态方法getInstance()来获得Calendar对象。

1、Calendar和Date可以自由转换

import java.util.Calendar;
import java.util.Date;

public class CalendarToDate {
    public static void main(String[] args){
        //创建一个默认的Calendar对象
        Calendar calendar = Calendar.getInstance();
        //从Calendar对象中获得对应的Date对象
        Date date = calendar.getTime();
        System.out.println(date);
        System.out.println(calendar.getTime());
//因为没有可以接收Date对象的Calendar构造器,无法用Calendar对象接收一个Date对象,
//所以先获得Calendar的实例,在调用setTime()方法
        Calendar calendar2 = Calendar.getInstance();
        calendar2.setTime(date);
        System.out.println(date);
        System.out.println(calendar2.getTime());
    }
}

结果:

Date类与Calendar类

2、Calendar的常规用法

基本操作:

Date getTime():获得Calendar代表的时间。

void set(int field,int  value):将给定的日历字段设置为给定值。

void set(int year,int month,int date):设置年、月、日。

void set(int year,int month,int,date,int hour,int minure,int second):设置Calendar对象的年、月、日、时、分、秒。

int get(int field):这的field是Calendar类的类变量,如 Calendar.YEAR等,该方法获的指定字段的值。

void add(int field,int value):根据日历的规则,对给定的field字段进行加减指定的value时间量,特别的对于超出指定字段所能表示的最大范围时,会对上下级做出改变,对下一级是修正到变化最小的值。

void roll(int field,int value):与add()方法类似,不过特别的,不向上级增大,对下级的修正与add()的一样。

int getActualMaximum(int field):返回指定日历字段可能拥有的最大值。例如,月的最大值是11,因为,Calendar.MONTH的起始值是0而不是1。

int getActualMinimum(int field):返回指定日历字段可能拥有的最小值,例如,月的最小值是0,而不是1。

 

import java.util.Calendar;
//静态导入
import static java.util.Calendar.*;

public class CalendarTest {
    public static void main(String[]  args){
        Calendar c = Calendar.getInstance();
        System.out.println(c);
        System.out.println(c.getTime());
        //取出年
        System.out.println(c.get(YEAR));
        //取出月份
        System.out.println(c.get(MONTH)+1);
        //取出日
        System.out.println(c.get(DATE));
        //分别设置年、月、日、小时、分钟、秒
        c.set(2003,10,23,12,32,33);
        //获取c对象代表的时间
        System.out.println(c.getTime());
        //将Calendar的年向前推一年
        c.add(YEAR,-1);
        System.out.println(c.getTime());
        c.roll(MONTH,-12);
        System.out.println(c.getTime());
        c.add(MONTH,-12);
        System.out.println(c.getTime());
    }
}

结果:

Date类与Calendar类

 

3、两种解释日历字段的模式(容错性):

lenient模式和non-lenient模式。当处于Calendar的leniend模式时,允许每个时间字段超出它允许范围的值,但当用setLenient(boolean true)来显式关闭lenient模式时,每个时间字段不在被允许超出允许的范围值,抛出异常。

import java.util.Calendar;

public class LenientTest {
    public static void main(String[] args){
        Calendar cal = Calendar.getInstance();
        System.out.println(cal.getTime());
        //结果是YEAR字段加1,MONTH字段为1(2月)
        cal.set(Calendar.MONTH,13);
        System.out.println(cal.getTime());
        //关闭容错性
        cal.setLenient(false);
        cal.set(Calendar.MONTH,13);
        System.out.println(cal.getTime());

    }
}

结果:

Date类与Calendar类

 

4、set()方法的延迟修改

set(f,value)中还设置一个内部成员变量,用于保存被指定修改的时间字段的结果值,指示该字段已经被修改,并直到下次调用到任何需要输出时间的方法时才会重新计算时间(代表实际时间的long型整数),避免多次计算。

import java.util.Calendar;

public class LazyTest {
    public static void main(String[] args){
        Calendar cal = Calendar.getInstance();
        cal.set(2003,7,31);
        System.out.println(cal.getTime());
        //将月份设为9,但9,。31号不存在,如果立即修改,系统将会把cal自动调整到2003.10.1
        cal.set(Calendar.MONTH,8);
//        不注释下一行时,得到的结果是10月份的
//        System.out.println(cal.getTime());
        //设置DATE字段为5
        cal.set(Calendar.DATE,5);
        System.out.println(cal.getTime());
    }
}

结果:

Date类与Calendar类

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/14235.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信