Skip to content

Commit

Permalink
Timestamp to Calendar and Calendar to Timestamp completed.
Browse files Browse the repository at this point in the history
  • Loading branch information
jdereg committed Mar 3, 2024
1 parent 3c49663 commit 044dfe6
Show file tree
Hide file tree
Showing 8 changed files with 32 additions and 45 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ static java.sql.Date toSqlDate(Object from, Converter converter) {
}

static Timestamp toTimestamp(Object from, Converter converter) {
return new Timestamp(((Calendar) from).getTime().getTime());
return new Timestamp(((Calendar) from).getTimeInMillis());
}

static AtomicLong toAtomicLong(Object from, Converter converter) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -511,7 +511,7 @@ private static void buildFactoryConversions() {
CONVERSION_DB.put(pair(AtomicLong.class, Calendar.class), NumberConversions::toCalendar);
CONVERSION_DB.put(pair(Date.class, Calendar.class), DateConversions::toCalendar);
CONVERSION_DB.put(pair(java.sql.Date.class, Calendar.class), DateConversions::toCalendar);
CONVERSION_DB.put(pair(Timestamp.class, Calendar.class), DateConversions::toCalendar);
CONVERSION_DB.put(pair(Timestamp.class, Calendar.class), TimestampConversions::toCalendar);
CONVERSION_DB.put(pair(Instant.class, Calendar.class), InstantConversions::toCalendar);
CONVERSION_DB.put(pair(LocalTime.class, Calendar.class), LocalTimeConversions::toCalendar);
CONVERSION_DB.put(pair(LocalDate.class, Calendar.class), LocalDateConversions::toCalendar);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,6 @@ static Calendar toCalendar(Object from, Converter converter) {
cal.set(Calendar.MINUTE, localTime.getMinute());
cal.set(Calendar.SECOND, localTime.getSecond());
cal.set(Calendar.MILLISECOND, localTime.getNano() / 1_000_000); // Convert nanoseconds to milliseconds
cal.getTime(); // compute fields
return cal;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -252,7 +252,6 @@ else if (map.containsKey(YEAR)) {
cal.set(Calendar.MINUTE, minute);
cal.set(Calendar.SECOND, second);
cal.set(Calendar.MILLISECOND, ms);
cal.getTime();
return cal;
} else {
return fromValueForMultiKey(map, converter, Calendar.class, CALENDAR_PARAMS);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -366,23 +366,10 @@ static Calendar toCalendar(Object from, Converter converter) {
return null;
}
ZonedDateTime zdt = DateUtilities.parseDate(calStr, converter.getOptions().getZoneId(), true);
if (zdt == null) {
return null;
}
ZonedDateTime zdtUser = zdt.withZoneSameInstant(converter.getOptions().getZoneId());

// Must copy this way. Using the GregorianCalendar.from(zdt) does not pass .equals() later.
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, zdt.getYear());
cal.set(Calendar.MONTH, zdt.getMonthValue() - 1);
cal.set(Calendar.DAY_OF_MONTH, zdt.getDayOfMonth());
cal.set(Calendar.HOUR_OF_DAY, zdt.getHour());
cal.set(Calendar.MINUTE, zdt.getMinute());
cal.set(Calendar.SECOND, zdt.getSecond());
cal.set(Calendar.MILLISECOND, zdt.getNano() / 1_000_000);
cal.setTimeZone(TimeZone.getTimeZone(zdtUser.getZone()));
cal.getTime();

Calendar cal = Calendar.getInstance(TimeZone.getTimeZone(zdtUser.getZone()));
cal.setTimeInMillis(zdtUser.toInstant().toEpochMilli());
return cal;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import java.time.OffsetDateTime;
import java.time.ZoneOffset;
import java.time.ZonedDateTime;
import java.util.Calendar;

/**
* @author John DeRegnaucourt ([email protected])
Expand Down Expand Up @@ -62,4 +63,11 @@ static OffsetDateTime toOffsetDateTime(Object from, Converter converter) {

return timestamp.toInstant().atOffset(zoneOffset);
}

static Calendar toCalendar(Object from, Converter converter) {
Timestamp timestamp = (Timestamp) from;
Calendar cal = Calendar.getInstance(converter.getOptions().getTimeZone());
cal.setTimeInMillis(timestamp.getTime());
return cal;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -190,7 +190,6 @@ private static void loadMapTests() {
Calendar cal = Calendar.getInstance(TOKYO_TZ);
cal.set(2024, Calendar.FEBRUARY, 5, 22, 31, 17);
cal.set(Calendar.MILLISECOND, 409);
cal.getTime();
return cal;
}, (Supplier<Map<String, Object>>) () -> {
Map<String, Object> map = new CompactLinkedMap<>();
Expand Down Expand Up @@ -421,7 +420,6 @@ private static void loadStringTests() {
Calendar cal = Calendar.getInstance(TOKYO_TZ);
cal.set(2024, Calendar.FEBRUARY, 5, 22, 31, 17);
cal.set(Calendar.MILLISECOND, 409);
cal.getTime();
return cal;
}, "2024-02-05T22:31:17.409+09:00"}
});
Expand Down Expand Up @@ -599,7 +597,6 @@ private static void loadLocalDateTimeTests() {
Calendar cal = Calendar.getInstance(TOKYO_TZ);
cal.set(2024, Calendar.MARCH, 2, 22, 54, 17);
cal.set(Calendar.MILLISECOND, 0);
cal.getTime();
return cal;
}, LocalDateTime.of(2024, Month.MARCH, 2, 22, 54, 17), true }
});
Expand Down Expand Up @@ -675,7 +672,6 @@ private static void loadLocalTimeTests() {
cal.set(Calendar.MINUTE, 47);
cal.set(Calendar.SECOND, 55);
cal.set(Calendar.MILLISECOND, 0);
cal.getTime();
return cal;
}, LocalTime.of(22, 47, 55), true }
});
Expand Down Expand Up @@ -775,6 +771,13 @@ private static void loadTimestampTests() {
{new BigDecimal(".999999999"), Timestamp.from(Instant.parse("1970-01-01T00:00:00.999999999Z")), true},
{new BigDecimal("1"), Timestamp.from(Instant.parse("1970-01-01T00:00:01Z")), true},
});
TEST_DB.put(pair(Calendar.class, Timestamp.class), new Object[][] {
{(Supplier<Calendar>) () -> {
Calendar cal = Calendar.getInstance(TOKYO_TZ);
cal.setTimeInMillis(now);
return cal;
}, new Timestamp(now), true},
});
TEST_DB.put(pair(Duration.class, Timestamp.class), new Object[][]{
{Duration.ofSeconds(-62167219200L), Timestamp.from(Instant.parse("0000-01-01T00:00:00Z")), true},
{Duration.ofSeconds(-62167219200L, 1), Timestamp.from(Instant.parse("0000-01-01T00:00:00.000000001Z")), true},
Expand Down Expand Up @@ -1086,7 +1089,6 @@ private static void loadSqlDateTests() {
{(Supplier<Calendar>) () -> {
Calendar cal = Calendar.getInstance(TOKYO_TZ);
cal.setTimeInMillis(now);
cal.getTime();
return cal;
}, new java.sql.Date(now), true}
});
Expand All @@ -1113,7 +1115,6 @@ private static void loadDateTests() {
{(Supplier<Calendar>) () -> {
Calendar cal = Calendar.getInstance(TOKYO_TZ);
cal.setTimeInMillis(now);
cal.getTime();
return cal;
}, new Date(now), true }
});
Expand All @@ -1130,52 +1131,44 @@ private static void loadCalendarTests() {
{(Supplier<Calendar>) () -> {
Calendar cal = Calendar.getInstance(TOKYO_TZ);
cal.setTimeInMillis(now);
cal.getTime();
return cal;
}, (Supplier<Calendar>) () -> {
Calendar cal = Calendar.getInstance(TOKYO_TZ);
cal.setTimeInMillis(now);
cal.getTime();
return cal;
} }
});
TEST_DB.put(pair(AtomicLong.class, Calendar.class), new Object[][]{
{new AtomicLong(-1), (Supplier<Calendar>) () -> {
Calendar cal = Calendar.getInstance(TOKYO_TZ);
cal.setTimeInMillis(-1);
cal.getTime();
return cal;
}, true},
{new AtomicLong(0), (Supplier<Calendar>) () -> {
Calendar cal = Calendar.getInstance(TOKYO_TZ);
cal.setTimeInMillis(0);
cal.getTime();
return cal;
}, true},
{new AtomicLong(1), (Supplier<Calendar>) () -> {
Calendar cal = Calendar.getInstance(TOKYO_TZ);
cal.setTimeInMillis(1);
cal.getTime();
return cal;
}, true},
});
TEST_DB.put(pair(BigDecimal.class, Calendar.class), new Object[][]{
{new BigDecimal(-1), (Supplier<Calendar>) () -> {
Calendar cal = Calendar.getInstance(TOKYO_TZ);
cal.setTimeInMillis(-1000);
cal.getTime();
return cal;
}, true},
{new BigDecimal("-0.001"), (Supplier<Calendar>) () -> {
Calendar cal = Calendar.getInstance(TOKYO_TZ);
cal.setTimeInMillis(-1);
cal.getTime();
return cal;
}, true},
{BigDecimal.ZERO, (Supplier<Calendar>) () -> {
Calendar cal = Calendar.getInstance(TOKYO_TZ);
cal.setTimeInMillis(0);
cal.getTime();
return cal;
}, true},
{new BigDecimal("0.001"), (Supplier<Calendar>) () -> {
Expand Down Expand Up @@ -1210,6 +1203,19 @@ private static void loadCalendarTests() {
cal.set(Calendar.MILLISECOND, 409);
return cal;
}},
{(Supplier<Map<String, Object>>) () -> {
Map<String, Object> map = new CompactLinkedMap<>();
Calendar cal = Calendar.getInstance(TOKYO_TZ);
cal.set(2024, Calendar.FEBRUARY, 5, 22, 31, 17);
cal.set(Calendar.MILLISECOND, 409);
map.put(VALUE, cal);
return map;
}, (Supplier<Calendar>) () -> {
Calendar cal = Calendar.getInstance(TOKYO_TZ);
cal.set(2024, Calendar.FEBRUARY, 5, 22, 31, 17);
cal.set(Calendar.MILLISECOND, 409);
return cal;
}},
});
}

Expand Down Expand Up @@ -1246,7 +1252,6 @@ private static void loadInstantTests() {
{(Supplier<Calendar>) () -> {
Calendar cal = Calendar.getInstance(TOKYO_TZ);
cal.setTimeInMillis(now);
cal.getTime();
return cal;
}, Instant.ofEpochMilli(now), true }
});
Expand Down Expand Up @@ -1467,19 +1472,16 @@ private static void loadBigIntegerTests() {
{(Supplier<Calendar>) () -> {
Calendar cal = Calendar.getInstance(TOKYO_TZ);
cal.setTimeInMillis(-1);
cal.getTime();
return cal;
}, BigInteger.valueOf(-1000000), true},
{(Supplier<Calendar>) () -> {
Calendar cal = Calendar.getInstance(TOKYO_TZ);
cal.setTimeInMillis(0);
cal.getTime();
return cal;
}, BigInteger.ZERO, true},
{(Supplier<Calendar>) () -> {
Calendar cal = Calendar.getInstance(TOKYO_TZ);
cal.setTimeInMillis(1);
cal.getTime();
return cal;
}, BigInteger.valueOf(1000000), true},
});
Expand Down Expand Up @@ -1866,31 +1868,26 @@ private static void loadDoubleTests() {
{(Supplier<Calendar>) () -> {
Calendar cal = Calendar.getInstance(TOKYO_TZ);
cal.setTimeInMillis(-1000);
cal.getTime();
return cal;
}, -1.0, true},
{(Supplier<Calendar>) () -> {
Calendar cal = Calendar.getInstance(TOKYO_TZ);
cal.setTimeInMillis(-1);
cal.getTime();
return cal;
}, -0.001, true},
{(Supplier<Calendar>) () -> {
Calendar cal = Calendar.getInstance(TOKYO_TZ);
cal.setTimeInMillis(0);
cal.getTime();
return cal;
}, 0d, true},
{(Supplier<Calendar>) () -> {
Calendar cal = Calendar.getInstance(TOKYO_TZ);
cal.setTimeInMillis(1);
cal.getTime();
return cal;
}, 0.001d, true},
{(Supplier<Calendar>) () -> {
Calendar cal = Calendar.getInstance(TOKYO_TZ);
cal.setTimeInMillis(1000);
cal.getTime();
return cal;
}, 1.0, true},
});
Expand Down Expand Up @@ -2334,13 +2331,11 @@ private static void loadLongTests() {
Calendar cal = Calendar.getInstance(TOKYO_TZ);
cal.set(2024, Calendar.FEBRUARY, 12, 11, 38, 0);
cal.set(Calendar.MILLISECOND, 0);
cal.getTime();
return cal;
}, 1707705480000L},
{(Supplier<Calendar>) () -> {
Calendar cal = Calendar.getInstance(TOKYO_TZ);
cal.setTimeInMillis(now); // Calendar maintains time to millisecond resolution
cal.getTime();
return cal;
}, now}
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2326,7 +2326,6 @@ void toCalendar(Object source)
{
Long epochMilli = 1687622249729L;

System.out.println("source.getClass().getName() = " + source.getClass().getName());
Calendar calendar = this.converter.convert(source, Calendar.class);
assertEquals(calendar.getTime().getTime(), epochMilli);

Expand Down

0 comments on commit 044dfe6

Please sign in to comment.