day01
java8 新的日期和时间API
java8之前的时间和日期
只能依赖java.util.Date类,这个类无法表达日期,只能以毫秒的精度表示时间
Date date = new Date();
System.out.println(date);
//输出结果:Mon Jun 08 10:14:31 CST 2020
Java1.1中的java.util.Calendar也存在类似的问题和缺陷。
DateFormat方法也有一些自己的问题,比如线程不安全。
Java8-LoaclDate、LoaclTime、LocalDateTime
LocalDate
LocalDate的实例是不可变对象,他只提供了简单的日期,并不包含当天的时间信息和时区信息。
通过静态工厂of来创建实例。
public static void main(String[] args) {
LocalDate of = LocalDate.of(2020, 6, 8);
System.out.println(of);
}
//输出结果:2020-06-08
通过LocalDate.now()获得当前日期。
public static void main(String[] args) {
LocalDate now = LocalDate.now();
System.out.println(now);
}
//输出结果:2020-06-08
可在LocalDate中获取到单独的年份,月份,星期几等。也可通过get()方法传入ChronoField枚举来获取到这些元素。
与LocalDate类似,LoaclTime则是来获取并操作时间的。
LoaclTime也可使用of来创建实例
public static void main(String[] args) {
LocalTime now = LocalTime.of(10,36,55);
System.out.println(now);
}
//输出结果:10:36:55
LocalTime.now()获取当前时间。
public static void main(String[] args) {
LocalTime now = LocalTime.now();
System.out.println(now);
}
//输出结果:10:38:32.688
也可以获取当前的时、分、秒。
LocalDateTime是LocalDate二号LocalTime的合体,同时表示了时间和日期,但不带时区。
public static void main(String[] args) {
//这里也可以用重载分别传入date和time
LocalDateTime of = LocalDateTime.of(2020, 6, 8, 10, 22, 10);
System.out.println(of);
}
可以使用toLocalTime/Date方法取到单独的时间和日期。
LocalDateTime of = LocalDateTime.of(2020, 6, 8, 10, 22, 10);
LocalDate localDate = of.toLocalDate();
LocalTime localTime = of.toLocalTime();
System.out.println(localDate);
System.out.println(localTime);
//输出:2020-06-08
// 10:22:10
共有方法
parse():传入日期返回LocalDate实例
//指定格式
LocalDate parse = LocalDate.parse("20191307", DateTimeFormatter.BASIC_ISO_DATE);
//不指定格式需在日期中自带格式
LocalDate parse1 = LocalDate.parse("2007-12-03");
DateTimeFormatter-格式化日期-时间对象(线程安全)。
DateTimeFormatter预定义了像BASIC_ISO_DATE,ISO_DATE_TIME这样的实例,所有的DateTimeFormatter实例都能用于以一定格式来创建特定日期或时间的字符串。
LocalDateTime date = LocalDateTime.of(2020, 6, 8, 10, 22, 10);
String format = date.format(DateTimeFormatter.BASIC_ISO_DATE);
String format1 = date.format(DateTimeFormatter.ISO_DATE_TIME);
System.out.println(format);
System.out.println(format1);
/*输出结果:
20200608
2020-06-08T10:22:10
*/
也可以通过解析日期或时间字符串重新创建该日期对象。
LocalDateTime dateTime = LocalDateTime.of(2020, 6, 8, 10, 22, 10);
LocalDate parse = LocalDate.parse("20200608",DateTimeFormatter.BASIC_ISO_DATE);
System.out.println(parse);
//输出:2020-06-08
可通过ofPattern()方法来自定义格式。
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("dd~MM~yy");
LocalDate of = LocalDate.of(2020, 6, 8);
String format = of.format(dateTimeFormatter);
System.out.println(format);
//输出:08~06~20
Period和Duration
Period:计算两个日期的间隔。
Duration:计算两个时间之间的间隔
//获取时间1
LocalDateTime now = LocalDateTime.now();
//睡一会
Thread.sleep(1000);
//获取时间2
LocalDateTime now1 = LocalDateTime.now();
//计算相差时间
Duration between = Duration.between(now, now1);
//输出相差秒数
System.out.println(between.getSeconds());
//获取时间日期1
LocalDate now = LocalDate.of(2015,03,12);
//睡一会
Thread.sleep(1000);
//获取日期2
LocalDate now1 = LocalDate.of(2020,06,8);
//计算相差时间
Period between = Period.between(now,now1);
//输出相差几年
System.out.println(between.getYears());