Date
date类为表示时间的类,其对时间的精准度至毫秒。
其出现时间及早,在jdk1.0版本的时候就已经出现,但随着版本的更新,大量构造方法已经不能使用,目前可以使用的构造方法有两个。
无参构造方法:通过获取当前时间戳,返回1970年至当前时间差多少毫秒
含参构造方法:只有一个参数,参数为毫秒数据。
表示含义:将传入的毫秒级参数转换成日期的形式
SimpleDateFormat
SimpleDateFormat类是用于展示日期的类,可以根据自己的设定来对展示时间的格式进行设定。
常用构造函数:
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm ss");
其中y表示年,因为年是四位数,所以必须要四个y来展示
M表示月,月份由两位构成,所以有两个M
d表示日,H表示时,m表示分,s表示秒
其中每个中间的展示内容都可以根据规定的格式进行修改
其构造方法是建立结构的一个方式,在后面调用SimpleDateFormat类的对象中的方法时,需要按照该构造方法格式来对方法调用,参考代码如下:
//当我们此处需要使用parse方法时
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm ss");
String t = format.format(new Date());
//此处parse方法为将时间转换为Date类的格式,用于类的计算
Date date = format.parse("2021-05-20 13:14 21");
//得到的结果为方法中的时间距离初始时间的毫秒数
long ds = (date.getTime()- new Date().getTime())/1000/60/60/24;
//此时得到的毫秒数,就是当前时间和输入时间的天数。
Calendar
上述日期类都是可以调用系统的时间,但在不同时区时,通过这样的方法无法做到准确的使用时间,Java中为了解决时区的问题,创建了Calendar类,,其可以根据不同的时区,实现对不同的时间的一个准确使用。
Calendar 表示日历类,该类具有一定的特殊性,因为Calendar本身为抽象类,所以理论上是不可以被直接创建对象的,但是因为该抽象类内部具有一个方法,可以对其本身进行创建,所以当我们需要使用该类时,可以采用调用该类中的静态方法来进行对象的创建,方法如下:
Calendar c1 = Calendar.getInstance();
Calendar类不能直接调用年月日等内容,而是将年月日储存在了一个数组中,年月日分别定义成为了不可变的常量,分别对应数组的下标。
例如:定义了
public final static int ERA = 0;
public final static int YEAR = 1;
public final static int MONTH = 2;
public final static int DATE = 5;
public final static int HOUR = 10;
public final static int MINUTE = 12;
public final static int SECOND = 13;
等静态常量,其分别对应数组中的一个下标,在调用get方法时,传入参数就是这些数组下标
例如:
获取当前年份
Calendar c1 = Calendar.getInstance();
//获取当前年份,因为其数组为int性,所以直接传出参数即为当前年份
int year = c1.get(Calendar.YEAR);
获取当前是本年度的第几天:
Calendar c1 = Calendar.getInstance();
//今天是当前年份的第n天
int day = c1.get(Calendar.DAY_OF_YEAR);
//今天是当前月份的第N天
int day_month = c1.get(Calendar.DAY_OF_MONTH);
Calendar类为日历类,还可以设置当前时间,使用set方法,set方法有两个参数,参数1为数组下标,参数2为要改为的参数
Calendar c1 = Calendar.getInstance();
c1.set(Calendar.YEAR,2020);
//改变后日历为2020年
Calendar类还可以对日期进行算数运算,例如可以增加年数
使用add方法对日期进行加法,参数1为数组下标,参数2为加的数量
Calendar c1 = Calendar.getInstance();
c1.add(Calendar.MONTH,12);
/*注:
①月份显示为0~11
②此处加了13个月,超过月数最大数,但是月的单位增加1,年的数量就会增加1,所以此处应该显示的为当前日期的下一年的当前日期
*/
如果想要减去月份,只需将参数2改为负数
Calendar类获取日历时间,返回Date对象使用getTime()
Calendar c1 = Calendar.getInstance();
Date d = c1.getTime();
获取当前月份的最大天数,使用GetActualMaximum(Calendar.DAY_OF_MONTH);
int m = c1.getActualMaximum(Calendar.DAY_OF_MONTH);