diff --git a/core-java-modules/core-java-datetime-conversion-2/src/main/java/com/baeldung/timestamptocalendar/SqlTimestampToCalendarConverter.java b/core-java-modules/core-java-datetime-conversion-2/src/main/java/com/baeldung/timestamptocalendar/SqlTimestampToCalendarConverter.java new file mode 100644 index 000000000000..86f11c674563 --- /dev/null +++ b/core-java-modules/core-java-datetime-conversion-2/src/main/java/com/baeldung/timestamptocalendar/SqlTimestampToCalendarConverter.java @@ -0,0 +1,17 @@ +package com.baeldung.timestamptocalendar; + +import java.sql.Timestamp; +import java.util.Calendar; + +public class SqlTimestampToCalendarConverter { + + public static Calendar timestampToCalendar(Timestamp timestamp) { + Calendar calendar = Calendar.getInstance(); + calendar.setTimeInMillis(timestamp.getTime()); + return calendar; + } + + public static Timestamp calendarToTimestamp(Calendar calendar) { + return new Timestamp(calendar.getTimeInMillis()); + } +} diff --git a/core-java-modules/core-java-datetime-conversion-2/src/test/java/com/baeldung/timestamptocalendar/SqlTimestampToCalendarConverterUnitTest.java b/core-java-modules/core-java-datetime-conversion-2/src/test/java/com/baeldung/timestamptocalendar/SqlTimestampToCalendarConverterUnitTest.java new file mode 100644 index 000000000000..ef97eca4d4bd --- /dev/null +++ b/core-java-modules/core-java-datetime-conversion-2/src/test/java/com/baeldung/timestamptocalendar/SqlTimestampToCalendarConverterUnitTest.java @@ -0,0 +1,39 @@ +package com.baeldung.timestamptocalendar; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotEquals; + +import java.sql.Timestamp; +import java.util.Calendar; + +import org.junit.Test; + +public class SqlTimestampToCalendarConverterUnitTest { + + @Test + public void givenTimestamp_whenConvertToCalendar_thenEqualMillis() { + Timestamp timestamp = new Timestamp(1713544200801L); + Calendar calendar = SqlTimestampToCalendarConverter.timestampToCalendar(timestamp); + assertEquals(calendar.getTimeInMillis(), timestamp.getTime()); + } + + @Test + public void givenCalendarFromTimestamp_whenConvertBackToTimestamp_thenEqualMillis() { + Timestamp timestamp = new Timestamp(1713544200801L); + Calendar calendar = SqlTimestampToCalendarConverter.timestampToCalendar(timestamp); + timestamp = SqlTimestampToCalendarConverter.calendarToTimestamp(calendar); + assertEquals(calendar.getTimeInMillis(), timestamp.getTime()); + } + + @Test + public void givenTimestamp_whenConvertToCalendarAndBack_thenLoseNanos() { + int nanos = 801789562; + int losslessNanos = 801000000; + Timestamp timestamp = new Timestamp(1713544200801L); + timestamp.setNanos(nanos); + assertEquals(nanos, timestamp.getNanos()); + Calendar calendar = SqlTimestampToCalendarConverter.timestampToCalendar(timestamp); + timestamp = SqlTimestampToCalendarConverter.calendarToTimestamp(calendar); + assertEquals(losslessNanos, timestamp.getNanos()); + } +}