diff --git a/quarkus-clock-service/src/main/java/ch/phoenix/oss/quarkus/commons/clock/ClockService.java b/quarkus-clock-service/src/main/java/ch/phoenix/oss/quarkus/commons/clock/ClockService.java index e9a214e..f6c3c26 100644 --- a/quarkus-clock-service/src/main/java/ch/phoenix/oss/quarkus/commons/clock/ClockService.java +++ b/quarkus-clock-service/src/main/java/ch/phoenix/oss/quarkus/commons/clock/ClockService.java @@ -1,10 +1,19 @@ package ch.phoenix.oss.quarkus.commons.clock; import java.time.Instant; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.ZonedDateTime; public interface ClockService { Instant instant(); long currentTimeMillis(); + + LocalDate localDate(); + + LocalDateTime localDateTime(); + + ZonedDateTime zonedDateTime(); } diff --git a/quarkus-clock-service/src/main/java/ch/phoenix/oss/quarkus/commons/clock/ClockServiceImpl.java b/quarkus-clock-service/src/main/java/ch/phoenix/oss/quarkus/commons/clock/ClockServiceImpl.java index 4c90334..e47c757 100644 --- a/quarkus-clock-service/src/main/java/ch/phoenix/oss/quarkus/commons/clock/ClockServiceImpl.java +++ b/quarkus-clock-service/src/main/java/ch/phoenix/oss/quarkus/commons/clock/ClockServiceImpl.java @@ -2,8 +2,7 @@ package ch.phoenix.oss.quarkus.commons.clock; import io.quarkus.arc.DefaultBean; import jakarta.enterprise.context.ApplicationScoped; -import java.time.Clock; -import java.time.Instant; +import java.time.*; @DefaultBean @ApplicationScoped @@ -24,4 +23,19 @@ class ClockServiceImpl implements ClockService { public long currentTimeMillis() { return clock.millis(); } + + @Override + public LocalDate localDate() { + return LocalDate.now(clock); + } + + @Override + public LocalDateTime localDateTime() { + return LocalDateTime.now(clock); + } + + @Override + public ZonedDateTime zonedDateTime() { + return ZonedDateTime.now(clock); + } } diff --git a/quarkus-clock-service/src/test/java/ch/phoenix/oss/quarkus/commons/clock/ClockServiceImplTest.java b/quarkus-clock-service/src/test/java/ch/phoenix/oss/quarkus/commons/clock/ClockServiceImplTest.java index 626bb0a..dfffea8 100644 --- a/quarkus-clock-service/src/test/java/ch/phoenix/oss/quarkus/commons/clock/ClockServiceImplTest.java +++ b/quarkus-clock-service/src/test/java/ch/phoenix/oss/quarkus/commons/clock/ClockServiceImplTest.java @@ -6,8 +6,7 @@ import static org.mockito.Mockito.when; import io.quarkus.test.InjectMock; import io.quarkus.test.junit.QuarkusTest; import jakarta.inject.Inject; -import java.time.Clock; -import java.time.Instant; +import java.time.*; import org.junit.jupiter.api.Test; @QuarkusTest @@ -38,4 +37,34 @@ class ClockServiceImplTest { .as("Instant should match expected value") .isEqualTo(expected); } + + @Test + void localDate() { + var instant = Instant.ofEpochMilli(1729280640915L); + when(clock.instant()).thenReturn(instant); + when(clock.getZone()).thenReturn(ZoneId.of("UTC")); + assertThat(clockService.localDate()) + .as("LocalDate should match expected value") + .isEqualTo(LocalDate.parse("2024-10-18")); + } + + @Test + void localDateTime() { + var instant = Instant.ofEpochMilli(1729280640915L); + when(clock.instant()).thenReturn(instant); + when(clock.getZone()).thenReturn(ZoneId.of("UTC")); + assertThat(clockService.localDateTime()) + .as("LocalDateTime should match expected value") + .isEqualTo(LocalDateTime.parse("2024-10-18T19:44:00.915")); + } + + @Test + void zonedDateTime() { + var instant = Instant.ofEpochMilli(1729280640915L); + when(clock.instant()).thenReturn(instant); + when(clock.getZone()).thenReturn(ZoneId.of("UTC")); + assertThat(clockService.zonedDateTime()) + .as("ZonedDateTime should match expected value") + .isEqualTo(ZonedDateTime.parse("2024-10-18T19:44:00.915Z[UTC]")); + } }