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
- DateTimeFormatter预定义了像
-
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());