|
30 | 30 | import java.text.SimpleDateFormat; |
31 | 31 | import java.time.Instant; |
32 | 32 | import java.time.LocalDateTime; |
| 33 | +import java.time.ZoneId; |
33 | 34 | import java.time.ZoneOffset; |
34 | 35 | import java.util.Calendar; |
35 | 36 | import java.util.Date; |
@@ -1288,6 +1289,112 @@ public void testToCalendarWithTimeZoneNull() { |
1288 | 1289 | assertThrows(NullPointerException.class, () -> DateUtils.toCalendar(date1, null)); |
1289 | 1290 | } |
1290 | 1291 |
|
| 1292 | + @Test |
| 1293 | + void testToLocalDateTimeWithSqlDate() { |
| 1294 | + java.sql.Date sqlDate = java.sql.Date.valueOf("2000-01-01"); |
| 1295 | + |
| 1296 | + LocalDateTime result = DateUtils.toLocalDateTime(sqlDate); |
| 1297 | + |
| 1298 | + assertNotNull(result); |
| 1299 | + |
| 1300 | + LocalDateTime expected = LocalDateTime.of(2000, 1, 1, 0, 0, 0); |
| 1301 | + assertEquals(expected, result); |
| 1302 | + |
| 1303 | + Instant instant = Instant.ofEpochMilli(sqlDate.getTime()); |
| 1304 | + LocalDateTime expectedWithZone = LocalDateTime.ofInstant(instant, ZoneId.systemDefault()); |
| 1305 | + assertEquals(expectedWithZone, result); |
| 1306 | + } |
| 1307 | + |
| 1308 | + @Test |
| 1309 | + public void testToLocalDateTimeWithSqlTime() { |
| 1310 | + java.sql.Time sqlTime = java.sql.Time.valueOf("12:30:45"); |
| 1311 | + |
| 1312 | + LocalDateTime result = DateUtils.toLocalDateTime(sqlTime); |
| 1313 | + |
| 1314 | + assertNotNull(result); |
| 1315 | + |
| 1316 | + LocalDateTime expected = LocalDateTime.of(1970, 1, 1, 12, 30, 45); |
| 1317 | + assertEquals(expected, result); |
| 1318 | + |
| 1319 | + Instant instant = Instant.ofEpochMilli(sqlTime.getTime()); |
| 1320 | + LocalDateTime expectedWithZone = LocalDateTime.ofInstant(instant, ZoneId.systemDefault()); |
| 1321 | + assertEquals(expectedWithZone, result); |
| 1322 | + } |
| 1323 | + |
| 1324 | + @Test |
| 1325 | + public void testToLocalDateTimeWithSqlTimestamp() { |
| 1326 | + java.sql.Timestamp sqlTimestamp = java.sql.Timestamp.valueOf("2000-01-01 12:30:45.123456789"); |
| 1327 | + |
| 1328 | + LocalDateTime result = DateUtils.toLocalDateTime(sqlTimestamp); |
| 1329 | + |
| 1330 | + assertNotNull(result); |
| 1331 | + |
| 1332 | + LocalDateTime expected = LocalDateTime.of( |
| 1333 | + 2000, 1, 1, 12, 30, 45, 123_456_789 |
| 1334 | + ); |
| 1335 | + assertEquals(expected, result); |
| 1336 | + |
| 1337 | + Instant instant = sqlTimestamp.toInstant(); |
| 1338 | + LocalDateTime expectedWithZone = LocalDateTime.ofInstant(instant, ZoneId.systemDefault()); |
| 1339 | + assertEquals(expectedWithZone, result); |
| 1340 | + } |
| 1341 | + |
| 1342 | + @Test |
| 1343 | + public void testToLocalDateTimeWithSqlTimestamp_NanoPrecision() { |
| 1344 | + java.sql.Timestamp sqlTimestamp = java.sql.Timestamp.valueOf("2000-01-01 12:30:45.987654321"); |
| 1345 | + |
| 1346 | + LocalDateTime result = DateUtils.toLocalDateTime(sqlTimestamp); |
| 1347 | + |
| 1348 | + LocalDateTime expected = LocalDateTime.of( |
| 1349 | + 2000, 1, 1, 12, 30, 45, 987_654_321 |
| 1350 | + ); |
| 1351 | + assertEquals(expected, result); |
| 1352 | + } |
| 1353 | + |
| 1354 | + @Test |
| 1355 | + public void testToLocalDateTimeWithSqlTimestamp_WithTimeZone() { |
| 1356 | + java.sql.Timestamp sqlTimestamp = java.sql.Timestamp.valueOf("2000-01-01 12:30:45"); |
| 1357 | + TimeZone timeZone = TimeZone.getTimeZone("America/New_York"); |
| 1358 | + |
| 1359 | + LocalDateTime result = DateUtils.toLocalDateTime(sqlTimestamp, timeZone); |
| 1360 | + |
| 1361 | + Instant instant = sqlTimestamp.toInstant(); |
| 1362 | + LocalDateTime expected = LocalDateTime.ofInstant(instant, timeZone.toZoneId()); |
| 1363 | + assertEquals(expected, result); |
| 1364 | + } |
| 1365 | + |
| 1366 | + @Test |
| 1367 | + public void testToLocalDateTimeWithSqlDate_Epoch() { |
| 1368 | + java.sql.Date sqlDate = java.sql.Date.valueOf("1970-01-01"); |
| 1369 | + |
| 1370 | + LocalDateTime result = DateUtils.toLocalDateTime(sqlDate); |
| 1371 | + |
| 1372 | + LocalDateTime expected = LocalDateTime.of(1970, 1, 1, 0, 0, 0); |
| 1373 | + assertEquals(expected, result); |
| 1374 | + } |
| 1375 | + |
| 1376 | + @Test |
| 1377 | + public void testToLocalDateTimeWithSqlTime_MaxValue() { |
| 1378 | + java.sql.Time sqlTime = java.sql.Time.valueOf("23:59:59"); |
| 1379 | + |
| 1380 | + LocalDateTime result = DateUtils.toLocalDateTime(sqlTime); |
| 1381 | + |
| 1382 | + LocalDateTime expected = LocalDateTime.of(1970, 1, 1, 23, 59, 59); |
| 1383 | + assertEquals(expected, result); |
| 1384 | + } |
| 1385 | + |
| 1386 | + @Test |
| 1387 | + public void testToLocalDateTimeWithSqlTimestamp_DaylightSaving() { |
| 1388 | + java.sql.Timestamp sqlTimestamp = java.sql.Timestamp.valueOf("2023-03-12 02:30:00"); |
| 1389 | + TimeZone newYork = TimeZone.getTimeZone("America/New_York"); |
| 1390 | + |
| 1391 | + LocalDateTime result = DateUtils.toLocalDateTime(sqlTimestamp, newYork); |
| 1392 | + |
| 1393 | + Instant instant = sqlTimestamp.toInstant(); |
| 1394 | + LocalDateTime expected = LocalDateTime.ofInstant(instant, newYork.toZoneId()); |
| 1395 | + assertEquals(expected, result); |
| 1396 | + } |
| 1397 | + |
1291 | 1398 | @Test |
1292 | 1399 | void shouldConvertDateToLocalDateTimeUsingDefaultTimeZone() { |
1293 | 1400 | TimeZone.setDefault(TimeZone.getTimeZone("Asia/Shanghai")); |
|
0 commit comments