From 3e7eeecc1b8cab33d62be00b599dde0425fa8cd2 Mon Sep 17 00:00:00 2001 From: Peter Siegmund Date: Fri, 16 Aug 2024 21:54:50 +0200 Subject: [PATCH] get posix data from zoneinfo files Signed-off-by: Peter Siegmund --- .../timezone/service/TimeZoneService.java | 5 ++++ .../service/impl/TimeZoneServiceImpl.java | 24 +++++++++++++++++++ .../web/controllers/TimeZoneController.java | 9 ++++++- 3 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 src/main/java/dev/mars3142/fhq/timezone_service/timezone/service/TimeZoneService.java create mode 100644 src/main/java/dev/mars3142/fhq/timezone_service/timezone/service/impl/TimeZoneServiceImpl.java diff --git a/src/main/java/dev/mars3142/fhq/timezone_service/timezone/service/TimeZoneService.java b/src/main/java/dev/mars3142/fhq/timezone_service/timezone/service/TimeZoneService.java new file mode 100644 index 0000000..3f63712 --- /dev/null +++ b/src/main/java/dev/mars3142/fhq/timezone_service/timezone/service/TimeZoneService.java @@ -0,0 +1,5 @@ +package dev.mars3142.fhq.timezone_service.timezone.service; + +public interface TimeZoneService { + String getPosixTimeZone(String timezone); +} diff --git a/src/main/java/dev/mars3142/fhq/timezone_service/timezone/service/impl/TimeZoneServiceImpl.java b/src/main/java/dev/mars3142/fhq/timezone_service/timezone/service/impl/TimeZoneServiceImpl.java new file mode 100644 index 0000000..d46618d --- /dev/null +++ b/src/main/java/dev/mars3142/fhq/timezone_service/timezone/service/impl/TimeZoneServiceImpl.java @@ -0,0 +1,24 @@ +package dev.mars3142.fhq.timezone_service.timezone.service.impl; + +import dev.mars3142.fhq.timezone_service.timezone.service.TimeZoneService; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import lombok.val; +import org.springframework.stereotype.Service; + +@Service +public class TimeZoneServiceImpl implements TimeZoneService { + + @Override + public String getPosixTimeZone(String timezone) { + val filename = Path.of("/usr/share/zoneinfo/" + timezone); + try { + val bytes = Files.readAllBytes(filename); + val content = new String(bytes).split("\n"); + return content[content.length - 1]; + } catch (IOException e) { + throw new RuntimeException(e); + } + } +} diff --git a/src/main/java/dev/mars3142/fhq/timezone_service/timezone/web/controllers/TimeZoneController.java b/src/main/java/dev/mars3142/fhq/timezone_service/timezone/web/controllers/TimeZoneController.java index d81d2c8..1f66520 100644 --- a/src/main/java/dev/mars3142/fhq/timezone_service/timezone/web/controllers/TimeZoneController.java +++ b/src/main/java/dev/mars3142/fhq/timezone_service/timezone/web/controllers/TimeZoneController.java @@ -2,6 +2,9 @@ package dev.mars3142.fhq.timezone_service.timezone.web.controllers; import dev.mars3142.fhq.timezone_service.timezone.domain.model.request.TimeZoneRequest; import dev.mars3142.fhq.timezone_service.timezone.domain.model.response.TimeZoneResponse; +import dev.mars3142.fhq.timezone_service.timezone.service.TimeZoneService; +import lombok.RequiredArgsConstructor; +import lombok.val; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; @@ -9,10 +12,14 @@ import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("v1/timezone") +@RequiredArgsConstructor public class TimeZoneController { + private final TimeZoneService timeZoneService; + @PostMapping() public TimeZoneResponse getTimeZone(@RequestBody TimeZoneRequest request) { - return new TimeZoneResponse(request.timezone()); + val timezone = timeZoneService.getPosixTimeZone(request.timezone()); + return new TimeZoneResponse(timezone); } }