Date类
1、概述
类Date表示特定的瞬间,精确到毫秒
2、构造方法
public Date() //分配 Date 对象并初始化此对象,以表示分配它的时间(精确到毫秒)。
public Date(long date) //分配 Date 对象并初始化此对象,以表示自从标准基准时间(称为“历元(epoch)”,即 1970 年 1 月 1 日 00:00:00 GMT)以来的指定毫秒数。
Date date = new Date();
System.out.println(date.toString()); //现在的日期
Date date1 = new Date(1000 * 60 * 60*24);
System.out.println(date1); //1970 年 1 月 1 日 00:00:00一天后的日期
3、成员方法
public long getTime(): 获取一个日期对象对象毫秒值
public void setTime(long time): 给一个日期对象设置上指定的毫秒值
Date date = new Date();
long time = date.getTime();
System.out.println(time);//计算机元年到现在过的毫秒值
Date date1 = new Date();
date1.setTime(1000 * 24 * 3600);
SimpleDateFormat类
1、概述
可以把一个日期对象格式化成一个字符串,也可以把一个日期字符串解析成一个日期对象。
2、构造方法
public SimpleDateFormat():使用默认的模式来创建一个SimpleDateFormat对象
public SimpleDateFormat(String pattern):使用指定的模式(规则比如yyyy:MM:dd HH:mm:ss)来创建一个SimpleDateFormat对象
规则定义
y:年,M:月,d:天,H:时,m:分,s:秒
3、成员方法
public String format(Date date): 把一个日期对象格式化成一个字符串
public Date parse(String dateStr): 把一个日期字符串解析成一个日期对象,注意要以指定格式解析
Date date = new Date();
SimpleDateFormat sim = new SimpleDateFormat();
String format = sim.format(date);
System.out.println(format);
SimpleDateFormat sim2 = new SimpleDateFormat("yyyy-MM-dd hh:mm:s");
String format1 = sim2.format(date);
System.out.println(format1);
输出:
19-5-5 下午5:02
2019-05-05 05:02:29
写一个简单的例子,灵活使用一下这个方法,测一下2000年的五月五日到现在过了多少天。
思路:输入日期为2000年5月5日的字符串,将之解析成一个日期对象,获取它对应的毫秒值,再获取当前时间的毫秒值,差值换算成天数。
String str = "2000-05-05";
SimpleDateFormat sim = new SimpleDateFormat("yyyy-MM-dd");
Date date = sim.parse(str);
long time = date.getTime();
Date date1 = new Date(); //此时日期为2019年5月5日
long time1 = date1.getTime();
System.out.println((time1-time)/1000/3600/24);
Calendar类
1、概述
Calendar 类是一个抽象类,不能直接new对象,可以通过他的一个静态成员方法getInstance()来获取他的对象。它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。
2、成员方法
public static Calendar getInstance() 使用默认时区和语言环境获得一个日历对象
public int get(int field) 获得给定日历字段对应的值 field通过Calendar提供的字
Calendar instance = Calendar.getInstance();
int year = instance.get(Calendar.YEAR);
int month = instance.get(Calendar.MONTH);
int day = instance.get(Calendar.DAY_OF_MONTH);
int hour = instance.get(Calendar.HOUR_OF_DAY);
int minute = instance.get(Calendar.MINUTE);
int second = instance.get(Calendar.SECOND);
System.out.println(year+"-"+month+"-"+day+" "+hour+":"+minute+":"+second);
输出:
2019-4-5 17:19:37 //月份是0-11,也就是说4代表5月
public void add(int field,int amount) 根据日历的规则,为给定的日历字段添加或减去指定的时间量
Calendar instance = Calendar.getInstance();
instance.add(Calendar.YEAR,1);
instance.add(Calendar.MONTH,5);
instance.add(Calendar.DAY_OF_MONTH,-4);
int year = instance.get(Calendar.YEAR);
int month = instance.get(Calendar.MONTH);
int day = instance.get(Calendar.DAY_OF_MONTH);
System.out.println(year+"-"+month+"-"+day);
输出:2020-9-1
public final void set(int year,int month,int date) 设置日历时间 年月日
public static void main(String[] args) throws ParseException {
Calendar instance = Calendar.getInstance();
instance.set(Calendar.YEAR,2016);
instance.set(Calendar.MONTH,10);
int year = instance.get(Calendar.YEAR);
int month = instance.get(Calendar.MONTH);
System.out.println(year+"-"+month);
}
输出:2016-10
现在做一个小测试,键盘录入任意一个年份,获取任意一年的二月有多少天
思路:创建Calendar对象,日期录入为三月一号,注意2表示三月,先前推算一天,输入月中的天数。
public static void main(String[] args) throws ParseException {
Scanner sc = new Scanner(System.in);
System.out.print("输入年份:");
int year = sc.nextInt();
Calendar instance = Calendar.getInstance();
instance.set(year,2,1);
instance.add(Calendar.DAY_OF_MONTH,-1);
int day = instance.get(Calendar.DAY_OF_MONTH);
System.out.println(year+"年的二月有"+day+"天");
}