在Java 8中,引入了全新的日期和时间API,大大改善了对日期和时间操作的灵活性和易用性。这个API被包含在`java.time`包中,它提供了丰富的类来处理日期、时间、时区等。下面我们将深入探讨`jdk8`的datetime时间函数的使用。
我们看一个简单的示例,创建一个`LocalDateTime`对象表示当前时间:
```java
LocalDateTime timePoint = LocalDateTime.now();
```
然后,我们可以根据不同的方式创建其他日期和时间对象,如:
- `LocalDate.of(2012, Month.DECEMBER, 12)`:指定年、月和日创建`LocalDate`对象。
- `LocalDate.ofEpochDay(150)`:从Unix纪元(1970年1月1日)的第150天创建`LocalDate`对象。
- `LocalTime.of(17, 18)`:创建一个特定小时和分钟的`LocalTime`对象。
- `LocalTime.parse("10:15:30")`:从字符串解析出`LocalTime`对象。
获取日期和时间的各个部分非常直观,例如:
```java
System.out.println(timePoint.toLocalDate());
System.out.println(timePoint.getMonth());
System.out.println(timePoint.getDayOfMonth());
System.out.println(timePoint.getSecond());
```
我们可以修改现有的日期时间,并返回一个新的对象,避免了原始对象的修改:
```java
LocalDateTime thePast = timePoint.withDayOfMonth(10).withYear(2010);
```
此外,可以使用`plus`方法添加或减少时间单位,比如周:
```java
LocalDateTime yetAnother = thePast.plusWeeks(3).plus(3, ChronoUnit.WEEKS);
```
`TemporalAdjusters`接口提供了许多预定义的时间调整器,用于实现更复杂的操作,如:
- `lastDayOfMonth()`:将日期调整到所在月份的最后一天。
- `previousOrSame(DayOfWeek.WEDNESDAY)`:将日期调整到前一个或当前的星期三。
- `LocalTime.now()`:将时间调整为当前的`LocalTime`。
除了`LocalDateTime`,还有其他类如`LocalDate`、`LocalTime`、`MonthDay`、`YearMonth`等,分别处理日期、时间、月份和日期组合以及年份和月份组合。此外,`ZonedDateTime`类用于处理带时区的日期时间,`OffsetTime`处理偏移时间,`Period`和`Duration`分别用于处理日期间隔和时间间隔。
Java 8的日期和时间API提供了强大而灵活的功能,可以方便地进行日期和时间的计算、比较、格式化和解析。这些功能使得在处理日期和时间时更加高效且不易出错。无论是日常开发还是特定业务需求,这个API都能满足大部分需求。通过熟练掌握这些函数,开发者可以更好地管理应用程序中的日期和时间逻辑。