[ Web Proxy ]
URL:
Viewing: https://raw.githubusercontent.com/KisCode/learn-java8/master/java8-datetime-api/README.md [Back]  [Original]

# 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)

Web Proxy Viewer  |  New URL  |  Original Page