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 + "日");

浙公网安备 33010602011771号