From ed2f4b02b74de5a8190f5e513f7e82ee9b29e398 Mon Sep 17 00:00:00 2001 From: Marcin Date: Tue, 5 Aug 2025 19:40:28 +0200 Subject: [PATCH 1/2] [BAEL-9349] Add main program and unit tests --- .../instantandlong/InstantAndLong.java | 34 ++++++++ .../InstantAndLongUnitTest.java | 77 +++++++++++++++++++ 2 files changed, 111 insertions(+) create mode 100644 core-java-modules/core-java-8-datetime-4/src/main/java/com/baeldung/instantandlong/InstantAndLong.java create mode 100644 core-java-modules/core-java-8-datetime-4/src/test/java/com/baeldung/instantandlong/InstantAndLongUnitTest.java diff --git a/core-java-modules/core-java-8-datetime-4/src/main/java/com/baeldung/instantandlong/InstantAndLong.java b/core-java-modules/core-java-8-datetime-4/src/main/java/com/baeldung/instantandlong/InstantAndLong.java new file mode 100644 index 000000000000..943c32cd7cfc --- /dev/null +++ b/core-java-modules/core-java-8-datetime-4/src/main/java/com/baeldung/instantandlong/InstantAndLong.java @@ -0,0 +1,34 @@ +package com.baeldung.instantandlong; + +import java.time.Instant; +import java.time.temporal.ChronoUnit; + +public class InstantAndLong { + + public static void main(String[] args) { + long nowLong = Instant.now().toEpochMilli(); + + long someDayLong = 1_753_610_399_076L; + Instant someDay = Instant.ofEpochMilli(someDayLong); + + long expirationPeriod = 2_592_000_000L; // 30 days in milliseconds + Instant now = Instant.now(); + Instant expirationTime = now.plus(expirationPeriod, ChronoUnit.MILLIS); + + expirationTime = Instant.now().plusMillis(2_592_000_000L); + + Instant aDayAgo = now.minus(86_400_000L, ChronoUnit.MILLIS); + + aDayAgo = now.plus(-86_400_000L, ChronoUnit.MILLIS); + + expirationPeriod = 30 // number of days + * 24 // hours in one day + * 3600 // seconds in one hour + * 1000L;// from seconds to milliseconds + + nowLong = Instant.now().toEpochMilli(); + + long expirationTimeLong = nowLong + expirationPeriod; + } + +} diff --git a/core-java-modules/core-java-8-datetime-4/src/test/java/com/baeldung/instantandlong/InstantAndLongUnitTest.java b/core-java-modules/core-java-8-datetime-4/src/test/java/com/baeldung/instantandlong/InstantAndLongUnitTest.java new file mode 100644 index 000000000000..4192df8ffac6 --- /dev/null +++ b/core-java-modules/core-java-8-datetime-4/src/test/java/com/baeldung/instantandlong/InstantAndLongUnitTest.java @@ -0,0 +1,77 @@ +package com.baeldung.instantandlong; + + +import org.junit.Test; +import static org.junit.Assert.assertEquals;//&&&&// + +import java.time.Instant; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.time.ZonedDateTime; +import java.time.format.DateTimeFormatter; +import java.time.temporal.ChronoUnit; +import java.util.Locale; + +public class InstantAndLongUnitTest { + + private long someDayLong = 1_753_610_399_076L; + private long oneDayLong = 86_400_000L; + private String stringDate = "2025-01-30T17:33:21"; + //2025.01.30 17:33:21 in milliseconds, Java epoch + private long dayInMillis = ((((2025 - 1970) * 365 + 29 + 14) * 24 // days, including an additional day for each of the 14 leap years + + 17) * 3600 //to seconds + + 33*60 + 21) //add minutes and seconds + * 1000L; //to milliseconds + + @Test + public void whenPlusMillis_thenNextDay() { + Instant someDay = Instant.ofEpochMilli(someDayLong); + Instant nextDay = someDay.plusMillis(oneDayLong); + + assertEquals(nextDay.toEpochMilli(), someDayLong + oneDayLong); + } + + @Test + public void whenPlus_thenNextDay() { + Instant someDay = Instant.ofEpochMilli(someDayLong); + Instant nextDay = someDay.plus(oneDayLong, ChronoUnit.MILLIS); + + assertEquals(nextDay.toEpochMilli(), someDayLong + oneDayLong); + } + + @Test + public void whenMinusMillis_thenPreviousDay() { + Instant someDay = Instant.ofEpochMilli(someDayLong); + Instant previousDay = someDay.minusMillis(oneDayLong); + + assertEquals(previousDay.toEpochMilli(), someDayLong - oneDayLong); + } + + @Test + public void whenMinus_thenPreviousDay() { + Instant someDay = Instant.ofEpochMilli(someDayLong); + Instant previousDay = someDay.minus(oneDayLong, ChronoUnit.MILLIS); + + assertEquals(previousDay.toEpochMilli(), someDayLong - oneDayLong); + } + + @Test + public void whenToEpochMilli_thenDaysInMillis() { + LocalDateTime dateTime = LocalDateTime.parse(stringDate, DateTimeFormatter.ISO_LOCAL_DATE_TIME); + ZonedDateTime zonedDateTime = dateTime.atZone(ZoneId.of("UTC")); + Instant instant = zonedDateTime.toInstant(); + + assertEquals(instant.toEpochMilli(), dayInMillis); + } + + @Test + public void whenOfEpochMilli_thenDateTimeAsInstant() { + LocalDateTime dateTime = LocalDateTime.parse(stringDate, DateTimeFormatter.ISO_LOCAL_DATE_TIME); + ZonedDateTime zonedDateTime = dateTime.atZone(ZoneId.of("UTC")); + Instant instant = zonedDateTime.toInstant(); + + assertEquals(Instant.ofEpochMilli(dayInMillis), instant); + } + +} + From 14087fd108822aebed849b7b6a0e58186199f52a Mon Sep 17 00:00:00 2001 From: MBuczkowski2025 Date: Wed, 6 Aug 2025 16:21:52 +0200 Subject: [PATCH 2/2] [BAEL-9349] - minor fix --- .../com/baeldung/instantandlong/InstantAndLongUnitTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core-java-modules/core-java-8-datetime-4/src/test/java/com/baeldung/instantandlong/InstantAndLongUnitTest.java b/core-java-modules/core-java-8-datetime-4/src/test/java/com/baeldung/instantandlong/InstantAndLongUnitTest.java index 4192df8ffac6..d06a2d56f177 100644 --- a/core-java-modules/core-java-8-datetime-4/src/test/java/com/baeldung/instantandlong/InstantAndLongUnitTest.java +++ b/core-java-modules/core-java-8-datetime-4/src/test/java/com/baeldung/instantandlong/InstantAndLongUnitTest.java @@ -2,7 +2,7 @@ import org.junit.Test; -import static org.junit.Assert.assertEquals;//&&&&// +import static org.junit.Assert.assertEquals; import java.time.Instant; import java.time.LocalDateTime;