新規作成
import java.time.LocalDateTime;
import java.time.LocalDate;
import java.time.LocalTime;
import java.time.ZonedDateTime;
import java.time.ZoneId;
import java.time.OffsetDateTime;
import java.time.ZoneOffset;
import java.time.Clock;
import java.time.Instant;
class Main {
public static void main(String args[]) {
//// タイムゾーンという概念をもたないクラスの新規作成
// OS の時間が YYYY/mm/dd HH:MM::SS JST ならば
// YYYY/mm/dd HH:MM::SS (重要: タイムゾーン情報も時差情報もなし) で作成されます。
LocalDateTime dt = LocalDateTime.now();
LocalDate date = LocalDate.now();
LocalTime time = LocalTime.now();
// 指定して作成
LocalDateTime dt2 = LocalDateTime.of(9999, 12, 31, 23, 59, 59); // 9999/12/31 12:59:59
//// タイムゾーンとひもづくクラスの新規作成 (夏時間も考慮されます)
// OS のタイムゾーンによらず、現在の時刻が YYYY/mm/dd HH:MM::SS ZoneId ならば
// YYYY/mm/dd HH:MM::SS ZoneId で作成されます。
ZonedDateTime dt3 = ZonedDateTime.now(ZoneId.of("Asia/Tokyo"));
ZonedDateTime dt4 = ZonedDateTime.now(ZoneId.of("UTC"));
ZonedDateTime dt5 = ZonedDateTime.now(ZoneId.systemDefault());
// 指定して作成
ZonedDateTime dt6 = ZonedDateTime.of(9999, 12, 31, 23, 59, 59, 0, ZoneId.of("UTC"));
ZonedDateTime dt7 = ZonedDateTime.of(dt, ZoneId.of("UTC"));
// UNIX タイムスタンプの利用
Clock clock = Clock.fixed(Instant.ofEpochSecond(1430681351), ZoneId.of("UTC"));
ZonedDateTime dt8 = ZonedDateTime.now(clock);
//// タイムゾーンではなく UTC との時差情報をもつクラスの新規作成
// OS のタイムゾーンによらず、現在の時刻が YYYY/mm/dd HH:MM::SS +X ならば
// YYYY/mm/dd HH:MM::SS +X で作成されます。
OffsetDateTime dt9 = OffsetDateTime.now(ZoneOffset.ofHours(+9));
OffsetDateTime dt10 = OffsetDateTime.now(); // OS の UTC との時差が利用されます
// 指定して作成
OffsetDateTime dt11 = OffsetDateTime.of(9999, 12, 31, 23, 59, 59, 0, ZoneOffset.ofHours(+9));
}
}
基本的な操作
import java.time.ZonedDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.time.Duration;
import java.time.temporal.TemporalAdjusters;
class Main {
public static void main(String args[]) {
ZonedDateTime dt = ZonedDateTime.now(ZoneId.of("UTC"));
// 文字列に変換
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss zZ");
System.out.println(dt.format(formatter)); //=> 2016/06/25 08:59:09 UTC+0000
// 加減算
Duration duration = Duration.ofHours(10);
ZonedDateTime dt2 = dt.plus(duration).minus(duration).plus(duration);
System.out.println(dt2.isEqual(dt)); //=> false
System.out.println(dt2.isBefore(dt)); //=> false
System.out.println(dt2.isAfter(dt)); //=> true
Long epoch = dt.toEpochSecond();
Long epoch2 = dt2.toEpochSecond();
System.out.println(epoch2 - epoch); //=> 36000 (= 60 * 60 * 10 secs)
// 月の最終日を取得
ZonedDateTime dt3 = dt.with(TemporalAdjusters.lastDayOfMonth());
}
}