Java : InstantSource - API使用例
InstantSource (Java SE 20 & JDK 20) の使用例まとめです。
だいたいのメソッドを網羅済みです。
API仕様のおともにどうぞ。
概要
現在のインスタントにアクセスできます。
InstantSource は、現在時刻を示す Instant を取得するためのインタフェースです。
Instant.now メソッドの代わりにこのインタフェースを使うと、ユニットテストなどでダミーの現在時刻が作りやすくなります。
関連 :
final var now = Instant.now();
System.out.println(now); // 2023-10-11T07:00:59.708305600Z
final var source = InstantSource.system();
final var instant = source.instant();
System.out.println(instant); // 2023-10-11T07:00:59.716300700Z
// 固定で 1999-12-31 00:00 を返します。
final var dateTime = ZonedDateTime.of(1999, 12, 31, 0, 0, 0, 0, ZoneOffset.UTC);
final var source = InstantSource.fixed(dateTime.toInstant());
final var instant = source.instant();
System.out.println(instant); // 1999-12-31T00:00:00Z
メソッド
static InstantSource fixed (Instant fixedInstant)
常に同じインスタントを返すソースを取得します。
final var now = Instant.now();
System.out.println(now); // 2023-10-11T07:00:59.708305600Z
final var source = InstantSource.system();
final var instant = source.instant();
System.out.println(instant); // 2023-10-11T07:00:59.716300700Z
// 固定で 1999-12-31 00:00 を返します。
final var dateTime = ZonedDateTime.of(1999, 12, 31, 0, 0, 0, 0, ZoneOffset.UTC);
final var source = InstantSource.fixed(dateTime.toInstant());
final var instant = source.instant();
System.out.println(instant); // 1999-12-31T00:00:00Z
Instant instant ()
ソースの現在のインスタントを取得します。
final var source = InstantSource.system();
for (int i = 0; i < 4; i++) {
final var instant = source.instant();
final var millis = source.millis();
System.out.printf("%s (millis = %d)%n", instant, millis);
TimeUnit.SECONDS.sleep(10);
}
// 結果
// ↓
//2023-10-11T07:02:30.858307300Z (millis = 1697007750858)
//2023-10-11T07:02:40.867718300Z (millis = 1697007760867)
//2023-10-11T07:02:50.878152500Z (millis = 1697007770878)
//2023-10-11T07:03:00.888919200Z (millis = 1697007780888)
default long millis ()
ソースの現在のミリ秒のインスタントを取得します。
このメソッドの使用例は、instant() にまとめて記載しました。
そちらのAPI使用例をご参照ください。
static InstantSource offset (InstantSource baseSource, Duration offsetDuration)
指定された継続時間が追加された、指定されたソースから瞬間を返すソースを取得します。
final var instant = Instant.ofEpochSecond(4102444800L);
System.out.println(instant); // 2100-01-01T00:00:00Z
final var baseSource = InstantSource.fixed(instant);
System.out.println(baseSource.instant()); // 2100-01-01T00:00:00Z
final var source1 = InstantSource.offset(baseSource, Duration.ofDays(-1));
System.out.println(source1.instant()); // 2099-12-31T00:00:00Z
final var source2 = InstantSource.offset(baseSource, Duration.ofHours(14).plusMinutes(30));
System.out.println(source2.instant()); // 2100-01-01T14:30:00Z
static InstantSource system ()
使用可能な最高のシステム・クロックを使用して現在のインスタントを返すソースを取得します。
このメソッドの使用例は、fixed(Instant fixedInstant) にまとめて記載しました。
そちらのAPI使用例をご参照ください。
static InstantSource tick (InstantSource baseSource, Duration tickDuration)
指定されたソースから、指定した期間の最も近い出現まで切り捨てられるソースを取得します。
final var baseSource = InstantSource.system();
final var souce = InstantSource.tick(baseSource, Duration.ofSeconds(2));
for (int i = 0; i < 8; i++) {
final var instant = souce.instant();
System.out.println(instant);
TimeUnit.SECONDS.sleep(1);
}
// 結果
// ↓
//2023-10-11T07:07:00Z
//2023-10-11T07:07:00Z
//2023-10-11T07:07:02Z
//2023-10-11T07:07:02Z
//2023-10-11T07:07:04Z
//2023-10-11T07:07:04Z
//2023-10-11T07:07:06Z
//2023-10-11T07:07:06Z
default Clock withZone (ZoneId zone)
指定されたタイムゾーンの時計を返します。
final var source = InstantSource.system();
System.out.println(source); // SystemInstantSource
{
final var zone = ZoneId.of("America/Los_Angeles");
final var clock = source.withZone(zone);
System.out.println(clock); // SystemClock[America/Los_Angeles]
}
{
final var zone = ZoneId.of("Asia/Tokyo");
final var clock = source.withZone(zone);
System.out.println(clock); // SystemClock[Asia/Tokyo]
}
関連記事
- 日付・時刻の基本
- Date, CalendarではなくLocalDateTime, ZonedDateTimeを使おう
- 文字列と日付・時刻の変換
- 日付と時刻、曜日の計算
- 現在時刻(日時)の取得いろいろ
- 現在の曜日(DayOfWeek)を取得
- ZoneIdとZoneOffsetの違い
- API 使用例
- Calendar (カレンダー)
- ChronoLocalDate
- Clock (時計)
- Date (日付・時刻)
- DateTimeException (日付・時刻の例外)
- DateTimeParseException (日付・時刻の解析例外)
- DayOfWeek (曜日)
- Duration (時間の量)
- Era (紀元)
- Instant (時点)
- JapaneseDate (和暦を使った日付)
- LocalDate (日付・タイムゾーンなし)
- LocalDateTime (日時・タイムゾーンなし)
- LocalTime (時刻・タイムゾーンなし)
- Month (月)
- MonthDay (月・日)
- OffsetDateTime (日時・オフセットあり)
- OffsetTime (時刻・オフセットあり)
- Period (日付の量)
- Temporal
- TemporalAccessor
- TemporalAdjuster (日付・時刻の調整)
- TemporalAdjusters (日付・時刻の調整ユーティリティ)
- TimeZone (タイムゾーン)
- Year (年)
- YearMonth (年・月)
- ZonedDateTime (日時・タイムゾーンあり)
- ZoneId (タイムゾーンID)
- ZoneOffset (タイムゾーン・オフセット)