
通过前10个例子来学习java.util.LocalDate 类。
LocalDate是在java8语言中引入的,作为Date 和Time API增强的一部分。ISO format 它代表了Date ,而没有timezone ,也就是YYYY-MM-DD 的信息。
它被用来存储像birthday 和holidays 的日期。
它只包含年、月、日。
java.util.Localdate 它实现了以下接口:
- 可序列化的
- 可比较的
- 本地日期(ChronoLocalDate
- 赋值
- 时间调整器(TemporalAccessor
- 时间调整器
LocalDate的特点:
- 它存储月、年、日
- 它不存储时间或时区信息
- 它存储生日和假期
- 它是不可变的类和线程安全
我们将看到LocalDate 类的许多用例。
如何获得今天、昨天和明天的日期?
LocalDate有以下方法:
LocalDate.now()方法用于获取默认时区的当前日期。LocalDate.plus()方法是将给定的日期与带有 参数的日期相加。ChronoUnit.DAYSLocalDate.minusDays()方法是在给定的日期中减去几天。
import java.time.LocalDate;
import java.time.temporal.ChronoUnit;
public class LocalDateExamples {
public static void main(String[] args) throws Exception{
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.of() 方法是使用year 、month 和Day 创建一个LocalDate 。
import java.time.LocalDate;
public class LocalDateObject {
public static void main(String[] args) throws Exception{
LocalDate giveDate = LocalDate.of(2011,05,5);
System.out.println(giveDate);
LocalDate todayDate = LocalDate.now();
System.out.println(todayDate);
}
}
输出:
2011-05-05
2018-08-27
如何从当前日期中获得年、月、周、日?
这是一个关于LocalDate类中以下方法的例子:
- getYear():返回当前年份
- getMonthValue():返回当前年份的数字
- getDayOfYear():返回一年中的某一天
- getDayOfMonth():返回月的日期
- getDayOfWeek():返回一周的日子
import java.time.LocalDate;
public class Test {
public static void main(String[] args) throws Exception{
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中使用的日期和时间值。
时间戳是日期和时间值的组合。它有toLocalDateTime() ,返回LocalDateTime ,并使用toLocalDate() 方法将其转换为LocalDate 。
下面是一个例子
import java.sql.Timestamp;
public class Test {
public static void main(String[] args) throws Exception{
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没有时区信息。
import java.time.Instant;
import java.time.LocalDate;
import java.time.ZoneId;
public class Test {
public static void main(String[] args) throws Exception{
LocalDate localDate = LocalDate.now();
Instant instantDate = localDate.atStartOfDay(ZoneId.systemDefault()).toInstant();
System.out.println(instantDate);
}
}
输出:
2018-08-26T18:30:00Z
LocalDate 有三种不同的方法来做比较。
isEqual方法:如果这个日期等于一个给定的日期,则返回真。isBefore方法:如果这个日期在给定的日期之前,则返回真。isAfter方法:如果这个日期是给定的,则返回真。
import java.time.LocalDate;
import java.time.Month;
public class Test {
public static void main(String[] args) throws Exception{
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 和其他格式。
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
public class Test {
public static void main(String[] args) throws Exception{
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
date无法解析,编译器在线程 "main "中抛出了Exceptionjava.time.format.DateTimeParseException。文本'28/08/2018'无法在索引0处被解析
LocalDate 提供 方法,该方法接收 对象。format() DateTimeFormatter
DateTimeFormatter持有字符串格式的输出日期。
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
public class Test {
public static void main(String[] args) throws Exception{
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
###如何在java8中把LocalDate转换成java.sql.Date?
LocalDate 提供了_valueOf() 方法,该方法返回java.sql.Date
对象。
import java.sql.Date;
import java.time.LocalDate;
public class Test {
public static void main(String[] args) throws Exception{
LocalDate currentDate = LocalDate.now();
Date sqlDate = Date.valueOf(currentDate);
System.out.println(sqlDate);
}
}
输出:
2018-08-27
java.util.Date 是在时间轴上指定时间,包括日期和时间以及时区信息。
首先,使用toInstant 转换为Instant 对象。要转换为LocalDate ,使用默认的时区ZoneId.systemDefault() ,最后调用toLocalDate() 来转换。
import java.sql.Date;
import java.time.LocalDate;
import java.time.ZoneId;
public class Test {
public static void main(String[] args) throws Exception{
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
结论
在这篇文章中,我们了解了java8中引入的一个新类--java.util.LocalDate ,以及使用这个类的例子。