Date类和Calendar的基本使用

1.Date类

1.1 构造函数

其实Date类拥有多个构造函数,只是部分已经过时,但是其中有未过时的构造函数可以把毫秒值转换成日期对象。

public Date():分配Date对象并初始化此对象,以表示分配它的当前时间(精确到毫秒)
public Date(long Date):分配Date对象并初始化此对象,以表示自从标准基时间(1970年1月1日)以来的指定毫秒数。
其实,我们查看源码可以发现,空构造函数的函数体是调用了有参的构造函数的this(System.currentTimeMillis())的
,其中 System.currentTimeMillis()是当前日期的毫秒值

简单来说,使用无参构造,可以自动给设置当前系统时间的毫秒时刻;指定long类型的构造参数,可以自定义毫秒时刻。

public static void main(String[] args) {
        //创建日期对象 当前日期
        Date d=new Date();
        System.out.println(d);
        //创建日期对象,把当前的毫秒值转换成日期对象
        System.out.println(new Date(0L));
}
//注意 再使用输出时,对象会自动调用Date类中的toString方法,Date类对Object类中的toString方法进行了覆盖重写,
所以结果会以指定的格式的字符串进行显示

public long getTime() 把日期对象转换成对应的时间毫秒值

1.2 DateFormat类

日期/时间格式化子类的抽象类,我们通过这个类可以帮我们完成日期和文本之间的转换,也就是可以在Date对象与String对象之间进行来回转换。

首先解释格式化和解析的含义:
格式化:按照指定的格式,从Date对象转换为String对象
解析:按照指定的格式,从String对象转换为Date对象

构造方法

由于DateFormat为抽象类,不能直接进行使用,所以需要使用其子类SimpleDateFormat,需要一个格式来指定格式化或者解析的标准

public SimpleDateFormat(String pattern):用给定的模式和默认语言环境的日期格式符号构造SimpleDateFormat
参数pattern是一个字符串,代表日期时间的自定义格式。
格式规则:(区分大小写)
y--------------------------------------年
M--------------------------------------月
d--------------------------------------日
H--------------------------------------时
m--------------------------------------分
s--------------------------------------秒
S--------------------------------------毫秒

public static void main(String[] args) {
		//对应日期格式如:2020-08-09 15:08:34
        DateFormat format=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date d1=new Date();
        String nowDate=format.format(d1);
        System.out.println(nowDate);
}

常用方法

DateFormat类常用的方法有:

public String format(Date d):将Date对象格式化为String对象
public Date parse(String sorce):将字符串解析为Date对象

public static void main(String[] args) {
		/**
         * 将String对象转换成Date对象
         */
        DateFormat sf=new SimpleDateFormat("yyyy年MM月dd日");
        String str="2020年3月21日";
        Date date=sf.parse(str);
        System.out.println(date);
}

案例:计算出一个人已经出生了多少天

思路 :
1.获取当前时间对应的毫秒值
2.获取自己出生日期的毫秒值
public static void main(String[] args) {
System.out.println("请输入出生日期:格式:yyyy-MM-dd");
        //获取出生日期 键盘输入
        String birthday=new Scanner(System.in).next();
        //将字符串转换成日期 即转换为Date对象
        SimpleDateFormat sf=new SimpleDateFormat("yyyy-MM-dd");
        Date birthdayDate= sf.parse(birthday);
        //获取今天的日期对象
        Date nowDate=new Date();
        //将两个日期转换成毫秒值 Date类的方法getTime()
        long sencone=nowDate.getTime()-birthdayDate.getTime();
        if(sencone<0){
            System.out.println("还没出生");
        }else{
            System.out.println(sencone/1000/60/60/24);
        }
}

2.Calendar类

Calendar是日历类,在Date后出现,替换掉了许多Date类的方法,该类将所有可能用到的时间的信息封装为静态成员变量,方便获取。日历类就算方便获取各个时间属性的。

2.1 获取方式

注意,Calendar为抽象类,不能直接创建对象,所以Calendar类在创建对象时并非直接创建,而是通过静态方法创建类对象。

public static Calendar getInstanc():使用默认时区和语言环境获得一个日历对象
public static void main(String[] args) {
	Calendar cal=Calendar.getInstance();
}

2.2常用方法

public int get(int field):返回给定日历字段的值
public void set(int field,int value):将给定的日历字段设置为给定值
public abstract void add(int field,int amount):根据日历的规则,为给定的日历字段添加或者减去指定的时间量
public Date getTime():返回一个表示Calendar时间值的Date对象

YEAR--------------------------------------年
MONTH--------------------------------------月
DAY_OF_MONTH--------------------------------------月中的天
HOUR--------------------------------------12小时制
HOUR_OF_DAY--------------------------------------24时小时制
MINUTE--------------------------------------分
SECOND--------------------------------------秒
DAY_OF_WEEK--------------------------------------周中的天

get/set方法

get用来获取指定字段的值,set方法用来设置指定字段的值

public static void main(String[] args) {
        Calendar cal=Calendar.getInstance();
        //设置年
        int year=cal.get(Calendar.YEAR);
        //设置月
        int month=cal.get(Calendar.MONTH)+1;
        //设置日
        int dayOfMonth=cal.get(Calendar.DAY_OF_MONTH);
        System.out.print(year + "年" + month + "月" + dayOfMonth + "日");
}

//使用set方法的两种形式
cal.set(Calendar.YEAR,2029);
cal.set(2018,11,8);

getTime方法:并不是获取毫秒时刻 而是拿到对应的Date对象
Calendar cal=Calendar.getInstance();
Date date=cal.getTime();
System.out.println(date);

add方法:可以对指定日历字段的值进行加减操作,如果第二个参数为正数则加上偏移量,如果为负数则减去偏移量。
int year=cal.get(Calendar.YEAR);
int month=cal.get(Calendar.MONTH)+1;
int dayOfMonth=cal.get(Calendar.DAY_OF_MONTH);
System.out.println(year + "年" + month + "月" + dayOfMonth + "日");
cal.add(Calendar.DAY_OF_MONTH,2);//加2天
cal.add(Calendar.YEAR,-3); //减3年
//注意 这里要把年月日这些变量重新获取一遍 要不然输出的还是之前的  没有变化
year=cal.get(Calendar.YEAR);
month=cal.get(Calendar.MONTH)+1;
dayOfMonth=cal.get(Calendar.DAY_OF_MONTH);
System.out.println(year + "年" + month + "月" + dayOfMonth + "日");
posted @ 2021-03-23 21:58  轻风格走一走  阅读(14)  评论(0)    收藏  举报