From 79295cef1aae1dfd7adadf3814468e41275af474 Mon Sep 17 00:00:00 2001 From: hizumiaoba <56146205+hizumiaoba@users.noreply.github.com> Date: Tue, 3 May 2022 12:40:31 +0900 Subject: [PATCH 1/1] feat: add JST calc class --- src/com/ranfa/lib/JST.java | 70 ++++++++++++++++++++++++++++++++++++++++++++++ src/test/JSTTest.java | 15 ++++++++++ 2 files changed, 85 insertions(+) create mode 100644 src/com/ranfa/lib/JST.java create mode 100644 src/test/JSTTest.java diff --git a/src/com/ranfa/lib/JST.java b/src/com/ranfa/lib/JST.java new file mode 100644 index 0000000..cd6f348 --- /dev/null +++ b/src/com/ranfa/lib/JST.java @@ -0,0 +1,70 @@ +package com.ranfa.lib; + +import java.io.IOException; +import java.net.InetAddress; +import java.net.SocketException; +import java.net.UnknownHostException; +import java.util.Date; +import java.util.Objects; + +import org.apache.commons.net.ntp.NTPUDPClient; +import org.apache.commons.net.ntp.NtpV3Packet; +import org.apache.commons.net.ntp.TimeInfo; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class JST { + + // Logger + private static final Logger LOG = LoggerFactory.getLogger(JST.class); + private static final String SERVER_NAME = "ntp.nict.jp"; + + // private constructor + private JST() { /* do nothing */ } + + public static Date JSTNow() { + NTPUDPClient client = new NTPUDPClient(); + InetAddress address = null; + try { + address = InetAddress.getByName(SERVER_NAME); + } catch (UnknownHostException e) { + // TODO 自動生成された catch ブロック + e.printStackTrace(); + } + try { + client.open(); + } catch (SocketException e) { + // TODO 自動生成された catch ブロック + e.printStackTrace(); + } + TimeInfo info = null; + try { + info = client.getTime(Objects.requireNonNull(address)); + } catch (IOException e) { + // TODO 自動生成された catch ブロック + e.printStackTrace(); + } + NtpV3Packet packet = Objects.requireNonNull(info).getMessage(); + info.computeDetails(); + LOG.debug("NTPClient: {}", client); + LOG.debug("NetAddress: {}", address); + LOG.debug("Time info: {}", info); + long t1 = packet.getOriginateTimeStamp().getTime(); + long t2 = packet.getReceiveTimeStamp().getTime(); + long t3 = packet.getTransmitTimeStamp().getTime(); + long t4 = info.getReturnTime(); + long CalculatedOffset = (t2 - t1 + t3 - t4) / 2; + long receiveOffset = info.getOffset(); + long offset = ( CalculatedOffset + receiveOffset ) / 2; + Date date = new Date(System.currentTimeMillis() + offset); + LOG.debug("Client originate Time: {}", t1); + LOG.debug("Server Received request Time: {}", t2); + LOG.debug("Server Transmit response Time: {}", t3); + LOG.debug("Client Received response Time: {}", t4); + LOG.info("Estimated time offset: {}", CalculatedOffset); + LOG.info("received time offset: {}", receiveOffset); + LOG.info("estimated JST: {}", date); + LOG.info("Current client date: {}", new Date(System.currentTimeMillis())); + return date; + } +} diff --git a/src/test/JSTTest.java b/src/test/JSTTest.java new file mode 100644 index 0000000..05edfd5 --- /dev/null +++ b/src/test/JSTTest.java @@ -0,0 +1,15 @@ +package test; + +import static org.junit.Assert.*; + +import org.junit.Test; + +import com.ranfa.lib.JST; + +public class JSTTest { + + @Test + public void JSTNonNullTest() { + assertNotNull(JST.JSTNow()); + } +} -- 2.11.0