在这篇博文中,我们将学习java.util.LocalDate类的10个例子。
LocalDate在java8语言中作为Date 和Time API的一部分被引入。ISO format 它代表了Date ,而没有timezone ,也就是YYYY-MM-DD 的信息。
它被用来存储日期,如生日和假期。
本地日期只包含年月日,尽管其他字段如
java.util.Localdate实现了以下接口
- 可序列化的
- 可比较的
- 本地日期(ChronoLocalDate
- 经验值
- 时间调整器(TemporalAccessor
- 时间调整器
LocalDate的特点
- 它存储月、年、日
- 它不存储时间或时区信息
- 它可以存储生日和假期
- 它是不可变的类和线程安全
我们将看到LocalDate类的许多应用案例。
如何获得今天、昨天和明天的日期?
LocalDate有以下方法
LocalDate.now() LocalDate.plus() 方法用于获取默认时区的当前日期。ChronoUnit.DAYS 参数 LocalDate.minusDays()方法用于从给定的日期中减去几天。
LocalDate todayDate = LocalDate.now();
System.out.println(todayDate);
LocalDate tomorrowDate = todayDate.plus(1, ChronoUnit.DAYS);
System.out.println(tomorrowDate);
LocalDate yesterdayDate = tomorrowDate.minusDays(2);
System.out.println(yesterdayDate);
输出是
2018-08-27
2018-08-28
2018-08-26
有两种方法来创建LocalDate对象。第一种方法,使用LocalDate.now() 方法创建LocalDate对象,返回当前日期。 第二种方法,LocalDate.of() 方法是使用year 、month 和Day 创建一个LocalDate 。
LocalDate giveDate = LocalDate.of(2011,05,5);
System.out.println(giveDate);
LocalDate todayDate = LocalDate.now();
System.out.println(todayDate);
如何从当前日期获得年、月和周、月、年的日期?
这是一个关于LocalDate类中以下方法的例子。
- getYear(): 返回当前年份
- getMonthValue():返回当前年份的数字
- getDayOfYear():返回一年中的某一天
- getDayOfMonth():返回月的日期
- getDayOfWeek():返回一周的日子
LocalDate todayDate = LocalDate.now();
System.out.println("Date: "+todayDate);
System.out.println("Year: "+todayDate.getYear());
System.out.println("Month: "+todayDate.getMonthValue());
System.out.println("Day of year : "+todayDate.getDayOfYear());
System.out.println("Day of Month : "+todayDate.getDayOfMonth());
System.out.println("Day of Week : "+todayDate.getDayOfWeek());
输出是
Date: 2018-08-27
Year: 2018
Month: 8
Day of year : 239
Day of Month : 27
Day of Week : MONDAY
java.sql.Timestamp类需要有JDBC API中使用的日期和时间值。
Timestamp是日期和时间值的组合。它有toLocalDateTime() ,返回LocalDateTime ,并使用toLocalDate() 方法将其转换为LocalDate 。下面是一个例子
long time = System.currentTimeMillis();
Timestamp timestamp=new Timestamp(time);
System.out.println(timestamp);
System.out.println(timestamp.toLocalDateTime().toLocalDate());
2018-08-27 14:50:58.689
2018-08-27
java.time.Instant类用于表示时间线中的即时时间,它有时区信息,而localDate没有时区信息。
LocalDate localDate = LocalDate.now();
Instant instantDate = localDate.atStartOfDay(ZoneId.systemDefault()).toInstant();
System.out.println(instantDate);
LocalDate有三种不同的方法来做比较。
- isEqual方法:如果这个日期等于给定的日期,则返回true。
- isBefore方法:如果这个日期在给定日期之前,则返回true。
- isAfter方法:如果这个日期是一个给定的日期,则返回true。
LocalDate localDateNow = LocalDate.now();
LocalDate localDate2016 = LocalDate.of(2016, Month.AUGUST, 10);
LocalDate localDate2015 = LocalDate.of(2015, Month.AUGUST, 10);
LocalDate localDate2014 = LocalDate.of(2014, Month.AUGUST, 10);
System.out.println("now - equals - 2016 " + localDateNow.isEqual(localDate2016));
System.out.println("2015 - After -2016 " + localDate2015.isAfter(localDate2016));
System.out.println("2014 - After -2015 " + localDate2014.isAfter(localDate2015));
System.out.println("2014 - Before -2015 " + localDate2014.isBefore(localDate2015));
输出:
now - equals - 2016 false
2015 - After -2016 false
2014 - After -2015 false
2014 - Before -2015 true
LocalDate 提供parse()方法。 是用于格式化日期时间对象的类。下面的例子有一个字符串的日期,并转换为不同的格式DateTimeFormatter ISO_LOCAL_DATE和其他格式。
System.out.println(LocalDate.parse("2018-08-27",DateTimeFormatter.ISO_LOCAL_DATE));
System.out.println(LocalDate.parse("2018/08/27",DateTimeFormatter.ofPattern("yyyy/MM/dd")));
System.out.println(LocalDate.parse("27-08-2018",DateTimeFormatter.ofPattern("dd-MM-yyy")));
System.out.println(LocalDate.parse("27-Aug-2018",DateTimeFormatter.ofPattern("dd-MMM-yyy")));
System.out.println(LocalDate.parse("Aug 27, 2018",DateTimeFormatter.ofPattern("MMM dd, yyyy")));
输出
2018-08-27
2018-08-27
2018-08-27
2018-08-27
2018-08-27
日期无法解析,编译器在线程 "main "中抛出了Exceptionjava.time.format.DateTimeParseException。文本'28/08/2018'无法在索引0处被解析。
LocalDate 提供 format()方法,该方法接收 DateTimeFormatter
对象。
DateTimeFormatter持有字符串格式的输出日期。
System.out.println(LocalDate.now().format(DateTimeFormatter.ISO_LOCAL_DATE));
System.out.println(LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy/MM/dd")));
System.out.println(LocalDate.now().format(DateTimeFormatter.ofPattern("dd-MM-yyy")));
System.out.println(LocalDate.now().format(DateTimeFormatter.ofPattern("dd-MMM-yyy")));
System.out.println(LocalDate.now().format(DateTimeFormatter.ofPattern("MMM dd, yyyy")));
输出:
2018-08-27
2018/08/27
27-08-2018
27-Aug-2018
Aug 27, 2018
LocalDate 提供了_valueOf() 方法,该方法返回 java.sql.Date
对象。
LocalDate currentDate = LocalDate.now();
Date sqlDate = Date.valueOf(currentDate);
System.out.println(sqlDate);
java.util.Date 是指定时间轴上的时间,包括日期和时间以及时区信息。
首先使用toInstant 转换为Instant 对象。要转换为LocalDate ,使用默认的时区ZoneId.systemDefault() ,最后调用toLocalDate() 来转换。
Date utilDate = new Date();
System.out.println(utilDate); // Mon Aug 27 15:47:04 IST 2018
LocalDate localDate = utilDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
System.out.println(localDate); //2018-08-27
输出是
Mon Aug 27 15:47:04 IST 2018
2018-08-27
总结
在这篇文章中,我们了解了java.util.LocalDate这个在java8中引入的新类,也发布了使用这个类的例子。