JAVA之常见类(二)
六、Date类
1.概述
类 Date
表示特定的瞬间,精确到毫秒。
2.构造方法
Date() 分配 Date 对象并初始化此对象,以表示分配它的时间(精确到毫秒)。 |
Date(long date) 分配 Date 对象并初始化此对象,以表示自从标准基准时间(称为“历元(epoch)”,即 1970 年 1 月 1 日 00:00:00 GMT)以来的指定毫秒数。 |
3.常用方法
long |
getTime() 返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。 |
void |
setTime(long time) 设置此 Date 对象,以表示 1970 年 1 月 1 日 00:00:00 GMT 以后 time 毫秒的时间点。 |
七、SimpleDateFormat类
1.概述
父类DateFormat 是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化并解析日期或时间。
SimpleDateFormat
是一个以与语言环境有关的方式来格式化和解析日期的具体类。它允许进行格式化(日期 -> 文本)、解析(文本 -> 日期)和规范化。
2.构造方法
3.常用方法
4.案例
Date d = new Date(); //获取当前时间对象
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");//创建日期格式化类对象
System.out.println(sdf.format(d)); //将日期对象转换为字符串
//2018/12/01 19:58:38
String str = "2000年08月08日 08:08:08";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
Date d = sdf.parse(str); //将时间字符串转换成日期对象
System.out.println(d);
//Tue Aug 08 08:08:08 CST 2000
需求:算一下你来到这个世界多少天?
//1,将生日字符串和今天字符串存在String类型的变量中
String birthday = "1983年07月08日";
String today = "2088年6月6日";
//2,定义日期格式化对象
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
//3,将日期字符串转换成日期对象
Date d1 = sdf.parse(birthday);
Date d2 = sdf.parse(today);
//4,通过日期对象后期时间毫秒值
long time = d2.getTime() - d1.getTime();
//5,将两个时间毫秒值相减除以1000,再除以60,再除以60,再除以24得到天
System.out.println(time / 1000 / 60 / 60 / 24 );
//38320
八、Calendar类
1.概述
Calendar
类是一个抽象类,它为特定瞬间与一组诸如 YEAR
、MONTH
、DAY_OF_MONTH
、HOUR
等 日历字段
之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。
2.常用方法
int |
get(int field) 返回给定日历字段的值。 |
abstract void |
add(int field, int amount) 根据日历的规则,为给定的日历字段添加或减去指定的时间量。 |
void |
set(int year, int month, int date) 设置日历字段 YEAR 、MONTH 和 DAY_OF_MONTH 的值。 |
Calendar c = Calendar.getInstance(); //父类引用指向子类对象
//System.out.println(c); //证明重写了toString方法打印了对象中所有的属性
System.out.println(c.get(Calendar.YEAR)); //通过字段获取对应的值
System.out.println(c.get(Calendar.MONTH));
Calendar c = Calendar.getInstance(); //父类引用指向子类对象
//System.out.println(c);
System.out.println(c.get(Calendar.YEAR)); //通过字段获取年
System.out.println(c.get(Calendar.MONTH)); //通过字段后期月,但是月是从0开始编号的
System.out.println(c.get(Calendar.DAY_OF_MONTH)); //月中的第几天
System.out.println(c.get(Calendar.DAY_OF_WEEK)); //周日是第一天,周六是最后一天
System.out.println(c.get(Calendar.YEAR) + "年" + getNum((c.get(Calendar.MONTH)+1))
+ "月" + getNum(c.get(Calendar.DAY_OF_MONTH)) + "日" + getWeek(c.get(Calendar.DAY_OF_WEEK)));
/*2018
*11
*1
*7
2018年12月01日星期六
*/
//如果是个数数字前面补0
public static String getNum(int num) {
return num > 9 ? "" + num : "0" + num;
}
//将星期存储表中进行查表
public static String getWeek(int week) {
String[] arr = {"","星期日","星期一","星期二","星期三","星期四","星期五","星期六"};
return arr[week];
}
注意:
1.月份从0开始计数
2.周日为第一天,周六为最后一天即第七天
Calendar c = Calendar.getInstance(); //父类引用指向子类对象
c.set(1998, 7, 9);
System.out.println(c.get(Calendar.YEAR) + "年" + getNum((c.get(Calendar.MONTH)+1))
+ "月" + getNum(c.get(Calendar.DAY_OF_MONTH)) + "日" + getWeek(c.get(Calendar.DAY_OF_WEEK)));
//1998年07月09日星期四
3.案例
需求:键盘录入任意一个年份,判断该年是闰年还是平年
Scanner sc = new Scanner(System.in);
System.out.println("请输入年份,判断该年份是闰年还是平年:");
String line = sc.nextLine(); //录入数字字符串
int year = Integer.parseInt(line); //将数字字符串转换成数字
boolean b = getYear(year);
System.out.println(b);
private static boolean getYear(int year) {
//2,创建Calendar c = Calendar.getInstance();
Calendar c = Calendar.getInstance();
//设置为那一年的3月1日
c.set(year, 2, 1);
//将日向前减去1
c.add(Calendar.DAY_OF_MONTH, -1);
//判断是否是29天
return c.get(Calendar.DAY_OF_MONTH) == 29;
}