- 1. 获取当前的日期(LocalDate .now()方法)
- 2. 获取年、月、日信息(getYear()、getMonthValue()、getDayOfMonth()方法)
- 3.获取特定日期(LocalDate.of()方法)
- 4.判断两个日期是否相等(equal方法)
- 5.检查像生日这种周期性事件(MonthDay类、YearMonth类)
- 6.获取当前时间(LocalTime.now())
- 7.在已有的时间上加多少小时(.plusHours()方法)
- 8.增加1个月、1年、1小时、1分钟甚至一个世纪(.plus()方法)
- 9.减少一年(minus()方法)
- 10.Clock时钟类
- 11.判断日期是早于还是晚于另一个日期(isBefore() 和 isAfter()方法)
- 12.处理时区
- 13.YearMonth类应用
- 14.检查闰年(isLeapYear()方法)
- 15.计算两个日期之间的天数、周数或月数(Period类)
- 16.包含时差信息的日期和时间
- 17.获取当前的时间戳(Instant 类)
- 18.格式化日期(DateTimeFormatter类)
Java处理日期、日历和时间的不足之处:将 java.util.Date 设定为可变类型,以及 SimpleDateFormat 的非线程安全使其应用非常受限。然后就在 java8 上面增加新的特性。 1. 获取当前的日期(LocalDate .now()方法)
//获取今天的日期
public static void main(String[] args) {
LocalDate today1 = LocalDate.now();
Date today2 = new Date();
System.out.println("今天是:"+today1);//打印出的日期格式非常友好
System.out.println("今天是:"+today2);
}
输出是:
今天是:2021-10-25 今天是:Mon Oct 25 15:27:48 CST 20212. 获取年、月、日信息(getYear()、getMonthValue()、getDayOfMonth()方法)
public static void main(String[] args) {
LocalDate today = LocalDate.now();
int year = today.getYear();
int month = today.getMonthValue();
int day = today.getDayOfMonth();
System.out.println("年:"+year);
System.out.println("月:"+month);
System.out.println("日:"+day);
}
输出
年:2021 月:10 日:253.获取特定日期(LocalDate.of()方法)
LocalDate.of() 创建任意日期
public static void main(String[] args) {
LocalDate anyDay = LocalDate.of(1949,10,1);
System.out.println(anyDay);
}
输出为:
1949-10-014.判断两个日期是否相等(equal方法)
LocalDate 重载了equal方法。注意,如果比较的日期是字符型的,需要先解析成日期对象再作判断。
public static void main(String[] args) {
LocalDate day01 = LocalDate.now();
LocalDate day02 = LocalDate.of(1989, 7, 15);
System.out.println(day01);
System.out.println(day02);
System.out.println(day01.equals(day02));
}
输出为:
2021-10-25 1989-08-16 false5.检查像生日这种周期性事件(MonthDay类、YearMonth类)
MonthDay类:这个类组合了月份和日,去掉了年,可以用它判断每年都会发生事件
应用场景:生日、纪念日、法定假日(国庆以及春节)、或者每个月固定时间发送邮件给客户, 这些周期性事件。
和这个类相似的还有一个YearMonth类
public static void main(String[] args) {
LocalDate today = LocalDate.now();
LocalDate jwsBirth = LocalDate.of(1989, 7, 15);
MonthDay birthday = MonthDay.of(jwsBirth.getMonth(), jwsBirth.getDayOfMonth());
MonthDay currentMonthDay = MonthDay.from(today);
System.out.println("生日的--月-日"+birthday);
System.out.println("当天的--月-日"+currentMonthDay);
if(currentMonthDay.equals(birthday)){
System.out.println("jws生日快乐!");
}else{
System.out.println("今天不是jws生日");
}
}
输出为:
生日的--月-日--07-15 当天的--月-日--10-25 今天不是jws生日6.获取当前时间(LocalTime.now())
LocalTime 类默认的格式是hh:mm:ss:nnn。
public static void main(String[] args) {
LocalTime nowTime = LocalTime.now();
System.out.println("现在时间:"+nowTime);
}
输出为:
现在时间:16:11:12.011//hh:mm:ss:nnn7.在已有的时间上加多少小时(.plusHours()方法)
public static void main(String[] args) {
LocalTime time01 = LocalTime.of(23,59);
LocalTime time02 = time01.plusHours(1);
System.out.println("原来时间"+time01);
System.out.println("更新时间"+time02);
}
输出为:
原来时间23:59 更新时间00:598.增加1个月、1年、1小时、1分钟甚至一个世纪(.plus()方法)
public static void main(String[] args) {
LocalDate today = LocalDate.now();
LocalDate nextWeek = today.plus(1, ChronoUnit.WEEKS);
LocalDate twoDay = today.plus(2, ChronoUnit.DAYS);
LocalDate nextYear = today.plus(1, ChronoUnit.YEARS);
System.out.println("今天 : " + today);
System.out.println("增加1周: " + nextWeek);
System.out.println("增加2天: " + twoDay);
System.out.println("增加1年: " + nextYear);
}
输出为:
今天 : 2021-10-25 增加1周: 2021-11-01 增加2天: 2021-10-27 增加1年: 2022-10-259.减少一年(minus()方法)
public static void main(String[] args) {
LocalDate today = LocalDate.now();
LocalDate previousYear = today.minus(1, ChronoUnit.YEARS);
System.out.println("现在日期:"+today);
System.out.println("减少一年:" + previousYear);
}
输出为:
现在日期:2021-10-25 减少一年:2020-10-2510.Clock时钟类
public static void main(String[] args) {
Clock clock = Clock.systemUTC();
Clock defaultClock = Clock.systemDefaultZone();
System.out.println("根据系统时间返回当前时间并设置为UTC : " + clock);
System.out.println("根据系统时钟区域返回时间 : " + defaultClock);
}
输出为:
根据系统时间返回当前时间并设置为UTC : SystemClock[Z] 根据系统时钟区域返回时间 : SystemClock[Asia/Shanghai]11.判断日期是早于还是晚于另一个日期(isBefore() 和 isAfter()方法)
public static void main(String[] args) {
LocalDate day01 = LocalDate.now();
LocalDate day02 = LocalDate.of(1989, 7, 15);
System.out.println("day01: " + day01);
System.out.println("day02: " + day02);
System.out.println("day01早于day02: " + day01.isBefore(day02));
System.out.println("day01晚于day02: " + day01.isAfter(day02));
}
输出为:
day01: 2021-10-25 day02: 1989-07-15 day01早于day02: false day01晚于day02: true12.处理时区
ZoneId 设置时区
ZoneDateTime 类来表示某时区下的时间
public static void main(String[] args) {
//设置中国时区
ZoneId zone = ZoneId.of("Asia/Shanghai");
LocalDateTime time = LocalDateTime.now();
ZonedDateTime timeAndZone = ZonedDateTime.of(time, zone);
System.out.println("设置时区: "+zone);
System.out.println("当前时间: "+time);
System.out.println("现在的日期和时间在特定的时区: " + timeAndZone);
}
输出为:
设置时区: Asia/Shanghai 当前时间: 2021-10-25T17:03:22.068 现在的日期和时间在特定的时区: 2021-10-25T17:03:22.068+08:00[Asia/Shanghai]13.YearMonth类应用
lengthOfMonth() 方法返回当月的天数
场景:表示信用卡到期这类固定日期。还可以用这个类得到当月共有多少天,在判断2月有28天还是29天时非常有用。
public static void main(String[] args) {
YearMonth month = YearMonth.now();
YearMonth days = YearMonth.of(1989, 2);
System.out.println("当前年月: "+ month);
System.out.println("当月有多少天: "+ month.lengthOfMonth());
System.out.println("当年有多少天: "+ month.lengthOfYear());
System.out.println("1989年2月有多少天: "+days.lengthOfMonth());
}
输出为:
当前年月: 2021-10 当月有多少天: 31 当年有多少天: 365 1989年2月有多少天: 2814.检查闰年(isLeapYear()方法)
public static void main(String[] args) {
LocalDate date = LocalDate.now();
System.out.println("现在是否是闰年: "+date.isLeapYear());
}
输出为:
现在是否是闰年: false15.计算两个日期之间的天数、周数或月数(Period类)
public static void main(String[] args) {
LocalDate day01 = LocalDate.now();
LocalDate day02 = LocalDate.of(1989, 7, 15);
Period differDays = Period.between(day01, day02);
System.out.println("相差多少天: "+differDays.getDays());
System.out.println("相差多少月: "+differDays.getMonths());
System.out.println("相差多少年: "+differDays.getYears());
}
输出为:
相差多少天: -10 相差多少月: -3 相差多少年: -3216.包含时差信息的日期和时间
ZoneOffset类用来表示时区,举例来说印度与GMT或UTC标准时区相差+05:30,可以通过ZoneOffset.of()静态方法来 获取对应的时区。一旦得到了时差就可以通过传入LocalDateTime和ZoneOffset来创建一个OffSetDateTime对象。
public static void main(String[] args) {
LocalDateTime datetime = LocalDateTime.now();
ZoneOffset offset = ZoneOffset.of("+05:30");
OffsetDateTime date = OffsetDateTime.of(datetime, offset);
System.out.println("这个时区时间"+date);
}
输出为:
这个时区时间 :2021-10-25T17:29:49.567+05:3017.获取当前的时间戳(Instant 类)
public static void main(String[] args) {
Instant timestamp = Instant.now();
System.out.println("获取当前时间戳: "+timestamp);
}
输出为:
获取当前时间戳: 2021-10-25T09:31:25.428Z18.格式化日期(DateTimeFormatter类)
Java 8引入了全新的日期时间格式工具,线程安全而且使用方便。它自带了一些常用的内置格式化工具。下面这个例子使用了BASIC_ISO_DATE格式化工具将19890715格式化成19890715
public static void main(String[] args) {
String dayStr = "19890715";
LocalDate dayFormat = LocalDate.parse(dayStr, DateTimeFormatter.BASIC_ISO_DATE);
System.out.println("day字符串: "+dayStr);
System.out.println("day时间格式: "+dayFormat);
}
输出为:
day字符串: 19890715 day时间格式: 1989-07-15



