学习Java——java8中的时间处理
随着时间的推移,我们不断在演变,不断创新,也改变了对于时间的认知和处理方法。在Java8中,时间处理也有了很大的改进和扩展。本文将为您详细介绍Java8中的新特性,包括新的时间API、日期时间格式化和解析等。
一、新的时间API
Java8中推出了一套新的日期时间API,官方称之为“java.time”。这个API非常强大,让你可以方便的处理日期、时间、时区、持续时间、操作等等,这些特性在早期的Java版本中都无法实现。官方的目标是提供一套优秀的日期时间处理API,可以替代早期Java版本中不太灵活,效率低下的日期、时间API。
1. LocalDate和LocalTime
LocalDate和LocalTime分别代表日期和时间,通过LocalDate和LocalTime可以获取日期和时间。以下是一些基本的示例:
```java
LocalDate date = w();
LocalTime time = w();
System.out.println(date); //2018-01-26
System.out.println(time); //10:06:56.654
```
你也可以创建一个具体的日期和时间,如下所示:
```java
LocalDate date = LocalDate.of(2018, Month.OCTOBER, 15);
LocalTime time = LocalTime.of(14, 45);
java时间日期格式转换System.out.println(date); //2018-10-15
System.out.println(time); //14:45
```
同时,LocalDate和LocalTime也支持一些常见的操作,如添加减少,比较等等。
2. LocalDateTime
LocalDateTime是LocalDate和LocalTime的结合体,用于表示日期和时间的组合。以下是一些基本的示例:
```java
LocalDateTime dateTime = w();
System.out.println(dateTime); //2020-05-12T10:16:24.971
LocalDateTime christmasEve = LocalDateTime.of(2018, Month.DECEMBER, 24, 18, 0);
System.out.println(christmasEve); //2018-12-24T18:00
```
可以通过LocalDateTime获取Date、Calendar和ZoneDateTime对象:
```java
LocalDateTime localDateTime = w();
Date date = Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
Calendar calendar = Instance();
calendar.setTimeInMillis(localDateTime.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli());
ZonedDateTime zonedDateTime = localDateTime.atZone(ZoneId.of("Asia/Shanghai"));
System.out.println(date); //Tue May 12 10:21:02 CST 2020
System.out.Time()); //Tue May 12 10:21:02 CST 2020
System.out.println(zonedDateTime); //2020-05-12T10:21:02.881+08:00[Asia/Shanghai]
```
3. Instant
Instant比较特殊,它表示的是从1970年1月1日0时0分0秒开始经过的秒数和纳秒数的总和。也就是说,Instant可以精确表示具体时间点,而不是时区或者时间偏移量。以下是一些基本的示例:
```java
Instant now = w();
System.out.println(now); //2020-05-12T02:34:40.163Z
Instant nextHour = now.plus(Duration.ofHours(1));
System.out.println(nextHour); //2020-05-12T03:34:40.163Z
```
4. Duration和Period
除上述常见的时间类型外,Java8中还提供了Duration和Period两个类,用于处理时间的持续时间。在代码中,Duration通常用于表示一定时间内的毫秒数或秒数,Period用于表示在一定时间内的年数、月数、日数。
举个例子,下面的代码将会打印出1天2小时30分0秒。
```java
Duration duration = Duration.ofDays(1).plusHours(2).plusMinutes(30);
System.out.println(duration); //PT26H30M
Period period = Period.ofDays(1);
System.out.println(period); //P1D
```
5. 时区和时钟
Java8中对时区和时钟进行了大量增强,它们构成了完整的日期/时间API。在Java8之前,处理时区和时钟比较麻烦,但Java8中可以很方便地获取所需要的时间日期信息。
```java
ZoneId zoneId = ZoneId.of("Asia/Shanghai");
ZonedDateTime zonedDateTime = ZonedDateTime.w(), zoneId);
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论