Last active
October 27, 2017 09:39
-
-
Save kariyayo/9a23d101bc0edb035990 to your computer and use it in GitHub Desktop.
java.timeパッケージのメモ
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* InstantとDuration | |
*/ | |
// java.time.Instant はエポックを起点とし、1日を86400秒として計測されたある時点を表す | |
Instant base = Instant.now(); // 2015-03-03T08:05:41.758Z | |
Instant after = base.plusSeconds(10).plusMillis(100).minusMillis(10); // 2015-03-03T08:05:51.848Z | |
Instant.now().getEpochSecond(); // 1451088582L | |
// java.time.Duration は2つのInstantの間隔 | |
Duration duration = Duration.between(base, after); //PT10.09S | |
duration.toMillis(); // 10090 | |
duration.isZero(); // false | |
duration.isNegative(); //false | |
duration.plusMillis(10).multipliedBy(100).dividedBy(10).negated().toMillis(); // -101000 | |
/** | |
* LocalDateとLocalTimeとPeriod | |
*/ | |
// java.time.LocalDate はゾーン情報を持っていない日付を表す。時刻ももっていない。誕生日や予定を表現するのに便利。 | |
LocalDate.now(); | |
LocalDate.of(2015, 1, 5); // 月は0ではなく、1から始まる | |
LocalDate.of(2015, Month.JANUARY, 1); | |
LocalDate.of(2015, 1, 5).minusYears(1).plusMonths(2).plusDays(10).plusWeeks(1); // 2014-03-22 | |
LocalDate.of(2015, 1, 5).withDayOfMonth(21); // 2015-01-21 | |
LocalDate.of(2015, 1, 5).getDayOfMonth(); // 5 | |
LocalDate.of(2015, 1, 5).getDayOfYear(); // 5 | |
LocalDate.of(2015, 1, 5).getDayOfWeek(); // MONDAY | |
LocalDate.of(2015, 1, 5).isBefore(LocalDate.of(2015, 2, 10)); // true | |
LocalDate.of(2015, 1, 5).isLeapYear(); // false | |
// java.time.Period は2つのLocalDateの間隔を表す。ただ、月と日が別々にしかとれない? | |
Period period = LocalDate.of(2015, 1, 5).until(LocalDate.of(2015, 3, 11)); // P2M6D | |
period.get(ChronoUnit.MONTHS); // 2 | |
period.get(ChronoUnit.DAYS); // 6 | |
// こうすると65日間という値が取れる。こっちの方が使いそう | |
LocalDate.of(2015, 1, 6).until(LocalDate.of(2015, 3, 11), ChronoUnit.DAYS); // 65 | |
// 翌週の火曜日 | |
LocalDate.of(2015, 1, 6).with(TemporalAdjusters.next(DayOfWeek.TUESDAY)); // 2015-01-13 | |
// 同じ週、もしくは、翌週の火曜日 | |
LocalDate.of(2015, 1, 6).with(TemporalAdjusters.nextOrSame(DayOfWeek.TUESDAY)); // 2015-01-06 | |
// 前週の月曜日 | |
LocalDate.of(2015, 1, 6).with(TemporalAdjusters.previous(DayOfWeek.MONDAY)); // 2015-01-05 | |
// 弟2土曜日 | |
LocalDate.of(2015, 1, 6).with(TemporalAdjusters.dayOfWeekInMonth(2, DayOfWeek.SATURDAY)); // 2015-01-10 | |
// 最終日曜日 | |
LocalDate.of(2015, 1, 6).with(TemporalAdjusters.lastInMonth(DayOfWeek.SUNDAY)); // 2015-01-25 | |
// 最終日 | |
LocalDate.of(2015, 1, 6).with(TemporalAdjusters.lastDayOfMonth()); // 2015-01-31 | |
// java.time.LocalTimeは、1日のある時刻を表す | |
LocalTime.now(); | |
LocalTime.of(21, 20); | |
LocalTime.of(21, 20).plusHours(3).plusMinutes(20).plusSeconds(10); // 00:40:10 | |
LocalTime.of(21, 20).withMinute(50); // 21:50 | |
LocalTime.of(21, 20).getHour(); // 21 | |
LocalTime.of(21, 20).isAfter(LocalTime.of(3, 1)); // true | |
// 00:00 からの経過秒数 | |
LocalTime.of(21, 20).toSecondOfDay(); // 76800 | |
/** | |
* ZonedDateTime | |
*/ | |
// java.time.ZonedDateTime はタイムゾーン付きの日時を表す | |
ZonedDateTime.now(); // 2015-03-04T16:54:00.422+09:00[Asia/Tokyo] | |
ZonedDateTime.now(ZoneId.of("Europe/Moscow")); // 2015-03-04T11:54:00.424+04:00[Europe/Moscow] | |
ZonedDateTime.ofInstant(Instant.now(), ZoneId.of("Asia/Tokyo")); // 2015-03-04T16:57:19.539+09:00[Asia/Tokyo] | |
ZonedDateTime.of(2015, 1, 6, 21, 30, 0, 0, ZoneId.of("Asia/Tokyo")); // 2015-01-06T21:30+09:00[Asia/Tokyo] | |
ZonedDateTime.of(LocalDate.of(2015, 1, 6), LocalTime.of(21, 30), ZoneId.of("Asia/Tokyo")); // 2015-01-06T21:30+09:00[Asia/Tokyo] | |
ZonedDateTime dateTime = ZonedDateTime.of(2015, 2, 6, 21, 30, 0, 0, ZoneId.of("Asia/Tokyo")); | |
dateTime.minusYears(1).plusMonths(2).plusDays(5).minusHours(1).minusMinutes(10); // 2014-04-11T20:20+09:00[Asia/Tokyo] | |
dateTime.withYear(2013).withHour(0).withMinute(0).withSecond(0).withNano(0); // 2013-02-06T00:00+09:00[Asia/Tokyo] | |
dateTime.withZoneSameInstant(ZoneId.of("Europe/Moscow")); // 2015-02-06T16:30+04:00[Europe/Moscow] | |
dateTime.withZoneSameLocal(ZoneId.of("Europe/Moscow")); // 2015-02-06T21:30+04:00[Europe/Moscow] | |
dateTime.getDayOfYear(); // 37 | |
dateTime.getDayOfMonth(); // 6 | |
dateTime.getDayOfWeek(); // TUESDAY | |
dateTime.getMonth(); // JANUARY | |
dateTime.getOffset(); // +9:00 | |
dateTime.isBefore(dateTime.plusHours(10)); // true | |
/** | |
* 文字列への変換 | |
*/ | |
// java.time.DateTimeFormatterを使って文字列へ変換する | |
DateTimeFormatter.ISO_OFFSET_DATE_TIME.format(dateTime); // 2015-02-06T21:30:00+09:00 | |
DateTimeFormatter.ISO_DATE_TIME.format(dateTime); // 2015-02-06T21:30:00+09:00[Asia/Tokyo] | |
DateTimeFormatter.ISO_INSTANT.format(dateTime); // 2015-02-06T12:30:00Z | |
DateTimeFormatter.ofPattern("yyyy/MM/dd").format(dateTime); // 2015/02/06 | |
/** | |
* 文字列からの変換 | |
*/ | |
LocalDate.parse("2015/03/03", DateTimeFormatter.ofPattern("yyyy/MM/dd")); // 2015-03-03 | |
LocalDate.parse("2015/03/03", DateTimeFormatter.ofPattern("yyyy/MM/dd")).withResolverStyle(ResolverStyle.STRICT)); // 実行時エラー | |
LocalDate.parse("2015/03/03", DateTimeFormatter.ofPattern("uuuu/MM/dd")).withResolverStyle(ResolverStyle.STRICT)); // 2015-03-03 STRICTの場合は"yyyy"ではなく"uuuu"が正しい | |
ZonedDateTime.parse("2015-02-06T21:30:00+09:00"); // 2015-02-06T21:30+09:00 | |
/** | |
* java.util.Dateとの変換 | |
*/ | |
Date date = Date.from(Instant.now()); | |
Instant instant = new Date().toInstant(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment