Date类
// 无参构造函数,封装当前的日期及时间
Date d=new Date();
System.out.println(d);
long l=d.getTime();//获得得距离1970年1月1日00:00:00的毫秒数
// 设置时间,传入的值为long型,代表距离1970年1月1日00:00:00的毫秒数
d.setTime(l+24*60*60*1000);
System.out.println(d);
Fri May 07 21:55:06 CST 2021
Sat May 08 21:55:06 CST 2021
Calendar类
// 创建对象
Calendar c=Calendar.getInstance();
// 获取日期、时间
System.out.println("年: "+c.get(Calendar.YEAR));
System.out.println("月: "+c.get(Calendar.MONTH));
System.out.println("日: "+c.get(Calendar.DAY_OF_MONTH));
System.out.println("时: "+c.get(Calendar.HOUR_OF_DAY));
System.out.println("分: "+c.get(Calendar.MINUTE));
System.out.println("秒: "+c.get(Calendar.SECOND));
// 设置日期、时间
c.set(2021,6,6);
System.out.println("年: "+c.get(Calendar.YEAR));
System.out.println("月: "+c.get(Calendar.MONTH));
System.out.println("日: "+c.get(Calendar.DAY_OF_MONTH));
// 日期计算
c.add(Calendar.YEAR,3); //3年之后
c.add(Calendar.MONTH,2); //2月之后
Calendar c2=Calendar.getInstance();
c2.set(2022,4,6);
System.out.println(c.after(c2)); //在日期c2之后
System.out.println(c.before(c2)); //在日期c2之前
年: 2021
月: 4
日: 7
时: 22
分: 10
秒: 10
年: 2021
月: 6
日: 6
true
false
SimpleDateFormat类
只要为了实现Date类与String的相互转化,Date类本身可以转化成String,但结果就如Fri May 07 21:55:06 CST 2021,并不好看,我们想要的转化是可以转化成我们想要的格式。
创建对象:
SimpleDateFormat sdf=new SimpleDateFormat(pattern);
pattern:
G 年代标志符
y 年
M 月
d 日
h 时 在上午或下午 (1~12)
H 时 在一天中 (0~23)
m 分
s 秒
S 毫秒
E 星期
D 一年中的第几天
F 一月中第几个星期几
w 一年中第几个星期
W 一月中第几个星期
a 上午 / 下午 标记符
k 时 在一天中 (1~24)
K 时 在上午或下午 (0~11)
z 时区
// 字符串->>Date
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
String s="2021-05-07";
Date d=sdf.parse(s);
System.out.println(d);
// Date->>String
Date d2=new Date();
SimpleDateFormat sdf2=new SimpleDateFormat("yyyy年MM月dd日");
String s2=sdf2.format(d);
System.out.println(s2);
在Fri May 07 00:00:00 CST 2021
2021年05月07日
LocalDate类
// 获取当前日期
LocalDate ld=LocalDate.now();
System.out.println(ld);
// 获取年月日
System.out.println("年: "+ld.getYear());
System.out.println("月: "+ld.getMonth());
System.out.println("日: "+ld.getDayOfMonth());
System.out.println("一年第:"+ld.getDayOfYear()+"天");
// 日期比较
LocalDate ld2=LocalDate.parse("2022-03-23");
System.out.println(ld2.compareTo(ld));
System.out.println(ld2.equals(ld));
// 闰年
System.out.println("是否闰年:"+ld.isLeapYear());
//计算
ld=ld.plusMonths(3);
System.out.println(ld);
ld=ld.minusYears(1);
System.out.println(ld);
2021-05-08
年: 2021
月: MAY
日: 8
一年第:128天
1
false
是否闰年:false
2021-08-08
2020-08-08
LocalDate与Date之间的转换:
// Date->>LocalDate
Date d=new Date();
System.out.println("Date: "+d);
LocalDate dt=d.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
System.out.println("LocalDate: "+dt);
// LocalDate->>Date
ZonedDateTime zdt=LocalDate.now().atStartOfDay(ZoneId.systemDefault());
Date d1=Date.from(zdt.toInstant());
System.out.println(d1);
Date: Sat May 08 00:13:48 CST 2021
LocalDate: 2021-05-08
Sat May 08 00:00:00 CST 2021
LocalTime类
// 获取当前时间
System.out.println("当前时间: "+LocalTime.now());
// 时间运算
LocalTime lt=LocalTime.now();
System.out.println("当前时间: "+lt);
lt=lt.plusHours(3);
System.out.println("3个小时之后的时间: "+lt);
当前时间: 11:07:14.976579300
当前时间: 11:07:14.977582400
3个小时之后的时间: 14:07:14.977582400
Period类
// Period类:表示一段时间的年、月、日
LocalDate ld1=LocalDate.parse("2021-04-03");
LocalDate ld2=LocalDate.parse("2021-05-06");
Period p=Period.between(ld1, ld2);
System.out.println("相差多少月: "+p.getMonths()); // 相差多少月: 1
System.out.println("相差多少天: "+p.getDays()); // 相差多少天: 3
long l=ld2.toEpochDay()-ld1.toEpochDay();
System.out.println("两个日期之间相隔"+l+"天");
相差多少月: 1
相差多少天: 3
两个日期之间相隔33天
DateTimeFormatter类
实现LocalDate与String之间的转换
// String->>LocalDate
DateTimeFormatter d1=DateTimeFormatter.ofPattern("yyyy-MM-dd");
LocalDate ld=LocalDate.parse("2021-05-06",d1);
System.out.println(ld);
// LocalDate->>String
DateTimeFormatter d2=DateTimeFormatter.ofPattern("yyyy年MM月dd日");
String s=d2.format(ld);
System.out.println(s);