# Java 8 API
## ZoneId
Java 8 `java.time.ZoneId` `java.util.TimeZone`
ZoneId `ZoneId.of()` `ZoneId.systemDefault()`
```java
ZoneId shanghaiZoneId = ZoneId.of("Asia/Shanghai");
ZoneId systemZoneId = ZoneId.systemDefault();
```
`of()` / `getAvailableZoneIds()` /
```java
Set zoneIds = ZoneId.getAvailableZoneIds();
```
`TimeZone`Java 8
```java
ZoneId oldToNewZoneId = TimeZone.getDefault().toZoneId();
```
`ZoneId` `LocalDate``LocalTime` `LocalDateTime` `ZonedDateTime`
```java
LocalDateTime localDateTime = LocalDateTime.now();
ZonedDateTime zonedDateTime = ZonedDateTime.of(localDateTime, shanghaiZoneId);
```
`ZonedDateTime` `LocalDateTime` `ZoneId` `2018-03-03T15:26:56.147` `LocalDateTime``+08:00[Asia/Shanghai]` ZoneId
`ZoneOffset` **UTC/GMT**
```java
ZoneOffset zoneOffset = ZoneOffset.of("+09:00");
LocalDateTime localDateTime = LocalDateTime.now();
OffsetDateTime offsetDateTime = OffsetDateTime.of(localDateTime, zoneOffset);
```
## Instant
InstantJavaGMT 19701100:0086400
**Instant**
InstantInstantinstant.now()Instant
```java
Instant now = Instant.now();
```
InstantJava
**Instant**
Instant
```java
long seconds = getEpochSecond()
int nanos = getNano()
```
**Instant**
InstantInstant
- `plusSeconds()`
- `plusMillis()`
- `plusNanos()`
- `minusSeconds()`
- `minusMillis()`
- `minusNanos()`
```java
Instant now = Instant.now();
Instant later = now.plusSeconds(3);
Instant earlier = now.minusSeconds(3);
```
InstantInstantInstant
> seconds `1970-01-01 00:00:00` nanos nanos999,999,999
## Clock
ClockClock `System.currentTimeMillis()`
InstantInstant `java.util.Date`
```java
Clock clock = Clock.systemDefaultZone();
long millis = clock.millis();
Instant instant = clock.instant();
Date legacyDate = Date.from(instant); // legacy java.util.Date
```
## LocalDate
LocalDateJava 8
java.util.Date2000.01.0100:00
LocalDatejava.timejava.time.LocalDateLocalDate
**LocalDate**
`LocalDate` `now()` `LocalDate`
```java
LocalDate localDate = LocalDate.now();
```
LocalDate
```java
LocalDate localDate2 = LocalDate.of(2018, 3, 3);
```
LocalDate `of()`
****
LocalDate
```java
int year = localDate.getYear();
Month month = localDate.getMonth();
int dayOfMonth = localDate.getDayOfMonth();
int dayOfYear = localDate.getDayOfYear();
DayOfWeek dayOfWeek = localDate.getDayOfWeek();
```
getMonth()getDayOfWeek()intgetValue()
**LocalDate**
- `plusDays()`
- `plusWeeks()`
- `plusMonths()`
- `plusYears()`
- `minusDays()`
- `minusWeeks()`
- `minusMonths()`
- `minusYears()`
```java
LocalDate d = LocalDate.of(2018, 3, 5);
LocalDate d1 = localDate.plusYears(3);
LocalDate d2 = localDate.minusYears(3);
```
1. LocalDated2018.3.5
2. d3LocalDated
## LocalTime
LocalTimeJava 810LocalTime
LocalTimeLocalTime
**LocatTime**
LocalTime
```java
LocalTime localTime = LocalTime.now();
```
```java
LocalTime localTime2 = LocalTime.of(21, 30, 59, 11001);
```
`of()`
**LocalTime**
- `getHour()`
- `getMinute()`
- `getSecond()`
- `getNano()`
**LocalTime**
LocalTime
- `plusHours()`
- `plusMinutes()`
- `plusSeconds()`
- `plusNanos()`
- `minusHours()`
- `minusMinutes()`
- `minusSeconds()`
- `minusNanos()`
```java
LocalTime localTime2 = LocalTime.of(21, 30, 59, 11001);
LocalTime localTimeLater = localTime.plusHours(3);
LocalTime localTimeEarlier = localTime.minusHours(3);
```
1. LocalTime21:30:5011001
2. LocalTime
3. LocalTimeJava 810LocalTime
LocalTimeLocalTime
## LocalDateTime
LocalDateTimeJava 8Java 8LocalDateLocalTime
LocalDateTimeLocalDateTime
**LocatDateTime**
LocalDateTimeLocalDateTime `now()`
```java
LocalDateTime localDateTime = LocalDateTime.now();
```
```java
LocalDateTime localDateTime2 = LocalDateTime.of(2018, 11, 26, 13, 55, 36, 123);
```
**LocalDateTime**
- `getYear()`
- `getMonth()`
- `getDayOfMonth()`
- `getDayOfWeek()`
- `getDayOfYear()`
- `getHour()`
- `getMinute()`
- `getSecond()`
- `getNano()`
int `getValue()` int
**LocalDateTime**
LocalDateTime
- `plusYears()`
- `plusMonths()`
- `plusDays()`
- `plusHours()`
- `plusMinutes()`
- `plusSeconds()`
- `plusNanos()`
- `minusYears()`
- `minusMonths()`
- `minusDays()`
- `minusHours()`
- `minusMinutes()`
- `minusSeconds()`
- `minusNanos()`
```java
LocalDateTime localDateTime = LocalDateTime.now();
LocalDateTime localDateTime1 = localDateTime.plusYears(3);
LocalDateTime localDateTime2 = localDateTime.minusYears(3);
```
1. LocalDateTime
2. LocalDateTime
3. LocalDateTime
## ZonedDateTime
ZonedDateTimeJava 8
ZonedDateTime ZonedDateTime
**ZonedDateTime**
ZonedDateTime
```java
ZonedDateTime dateTime = ZonedDateTime.now();
```
ID
```java
ZoneId zoneId = ZoneId.of("UTC+1");
ZonedDateTime dateTime2 = ZonedDateTime.of(2015, 11, 30, 23, 45, 59, 1234, zoneId);
```
**ZonedDateTime**
- `getYear()`
- `getMonth()`
- `getDayOfMonth()`
- `getDayOfWeek()`
- `getDayOfYear()`
- `getHour()`
- `getMinute()`
- `getSecond()`
- `getNano()`
intgetValue()int
**ZonedDateTime**
ZonedDateTime
- `plusYears()`
- `plusMonths()`
- `plusDays()`
- `plusHours()`
- `plusMinutes()`
- `plusSeconds()`
- `plusNanos()`
- `minusYears()`
- `minusMonths()`
- `minusDays()`
- `minusHours()`
- `minusMinutes()`
- `minusSeconds()`
- `minusNanos()`
Period
```java
ZonedDateTime zoneDateTime = previousDateTime.plus(Period.ofDays(3));
```
****
ZoneIdZoneId.now()ZoneId.of(xxx)
```java
ZoneId zoneId = ZoneId.of("UTC+1");
```
`of()` IDUTC+1UTCZoneId+1-5
zone id
```java
ZoneId zoneId2 = ZoneId.of("Europe/Copenhagen");
ZoneId zoneId3 = ZoneId.of("Europe/Paris");
```
## DateTimeFormatter
DateTimeFormatterJava 8 `java.time.format`
**DateTimeFormatter**
DateTimeFormatter
```java
BASIC_ISO_DATE
ISO_LOCAL_DATE
ISO_LOCAL_TIME
ISO_LOCAL_DATE_TIME
ISO_OFFSET_DATE
ISO_OFFSET_TIME
ISO_OFFSET_DATE_TIME
ISO_ZONED_DATE_TIME
ISO_INSTANT
ISO_DATE
ISO_TIME
ISO_DATE_TIME
ISO_ORDINAL_TIME
ISO_WEEK_DATE
RFC_1123_DATE_TIME
```
DateTimeFormatterJava
****
DateTimeFormatterformat()
```java
DateTimeFormatter formatter = DateTimeFormatter.BASIC_ISO_DATE;
String formattedDate = formatter.format(LocalDate.now());
System.out.println(formattedDate);
```
LocalDate20150703201835
ZonedDateTime
```java
DateTimeFormatter formatter = DateTimeFormatter.BASIC_ISO_DATE;
String formattedZonedDate = formatter.format(ZonedDateTime.now());
System.out.println("formattedZonedDate = " + formattedZonedDate);
```
20180305+0800
201835UTC+8
## Duration
DurationInstantJava 8
DurationDurationDurtaion
**Duration**
`Duration` `Duration` `between()`
```java
Instant first = Instant.now();
// wait some time while something happens
Instant second = Instant.now();
Duration duration = Duration.between(first, second);
```
**Duration**
DurationSystem.getCurrentTimeMillis()Duration
```java
long seconds = getSeconds()
int nanos = getNano()
```
- `toNanos()`
- `toMillis()`
- `toMinutes()`
- `toHours()`
- `toDays()`
`toNanos()` `getNano()` `toNanos()` `Duration`
`getNano()`
`toSeconds()` `getSeconds()`
**Duration**
Duration
- `plusNanos()`
- `plusMillis()`
- `plusSeconds()`
- `plusMinutes()`
- `plusHours()`
- `plusDays()`
- `minusNanos()`
- `minusMillis()`
- `minusSeconds()`
- `minusMinutes()`
- `minusHours()`
- `minusDays()`
```java
Duration start = ... //obtain a start duration
Duration added = start.plusDays(3);
Duration subtracted = start.minusDays(3);
```
1. Durationstart
2. Durationstartaddedstartsubstracted
DurationDuration
```java
long days = duration.toDays(); //
long hours = duration.toHours(); //
long minutes = duration.toMinutes(); //
long seconds = duration.getSeconds(); //
long milliSeconds = duration.toMillis(); //
long nanoSeconds = duration.toNanos(); //
```
##
###
Java 8//
```java
LocalDate date = LocalDate.of(2017, 1, 5); // 2017-01-05
LocalDate date1 = date.withYear(2016); // 2016-01-05
LocalDate date2 = date.withMonth(2); // 2017-02-05
LocalDate date3 = date.withDayOfMonth(1); // 2017-01-01
LocalDate date4 = date.plusYears(1); // 2018-01-05
LocalDate date5 = date.minusMonths(2); // 2016-11-05
LocalDate date6 = date.plus(5, ChronoUnit.DAYS); // 5 2017-01-10
```
`with()` TemporalAdjuster
```java
LocalDate date7 = date.with(nextOrSame(DayOfWeek.SUNDAY)); //
LocalDate date9 = date.with(lastInMonth(DayOfWeek.SATURDAY)); //
```
`TemporalAdjusters`
`import static java.time.temporal.TemporalAdjusters.*;`
`TemporalAdjusters`
| | |
|:-----:|:-------|
| `dayOfWeekInMonth` | |
| `firstDayOfMonth` | |
| `firstDayOfNextMonth` | |
| `firstDayOfNextYear` | |
| `firstDayOfYear` | |
| `firstInMonth` | |
| `lastDayOfMonth` | |
| `lastDayOfNextMonth` | |
| `lastDayOfNextYear` | |
| `lastDayOfYear` | |
| `lastInMonth` | |
| `next / previous` | / |
| `nextOrSame / previousOrSame` | / |
`TemporalAdjuster`
`TemporalAdjuster` Lambda
```java
@FunctionalInterface
public interface TemporalAdjuster {
Temporal adjustInto(Temporal temporal);
}
```
```java
LocalDate date = LocalDate.of(2017, 1, 5);
date.with(temporal -> {
//
DayOfWeek dayOfWeek = DayOfWeek.of(temporal.get(ChronoField.DAY_OF_WEEK));
//
int dayToAdd = 1;
//
if (dayOfWeek == DayOfWeek.FRIDAY) {
dayToAdd = 3;
}
//
if (dayOfWeek == DayOfWeek.SATURDAY) {
dayToAdd = 2;
}
return temporal.plus(dayToAdd, ChronoUnit.DAYS);
});
```
###
JavaISO 8601365366440010
Java 84
- `ThaiBuddhistDate`
- `MinguoDate`
- `JapaneseDate`
- `HijrahDate`
`ChronoLocalDate`
```java
LocalDate date = LocalDate.now();
JapaneseDate jpDate = JapaneseDate.from(date);
```
ChronoLocalDateChronoLocalDate
```java
Chronology jpChronology = Chronology.ofLocale(Locale.JAPANESE);
ChronoLocalDate jpChronoLocalDate = jpChronology.dateNow();
```
`ChronoLocalDate`
1213
12
1
`LocalDate`
`ChronoLocalDate`
###
- [SimpleDateFormat](http://www.cnblogs.com/zemliu/p/3290585.html)
- [SimpleDateFormat](http://blog.csdn.net/yiifaa/article/details/73499053)
- [JavaNN3](http://blog.csdn.net/liuwei0376/article/details/13620879)