diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/date/DateBetween.java b/hutool-core/src/main/java/org/dromara/hutool/core/date/DateBetween.java index b5114482d..e78e42253 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/date/DateBetween.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/date/DateBetween.java @@ -168,6 +168,14 @@ public class DateBetween implements Serializable { return result; } + public Date getBegin() { + return begin; + } + + public Date getEnd() { + return end; + } + /** * 格式化输出时间差 * diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/date/chinese/ChangAnTimeConverter.java b/hutool-core/src/main/java/org/dromara/hutool/core/date/chinese/ChangAnTimeConverter.java index 7505c8263..2ae8e8590 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/date/chinese/ChangAnTimeConverter.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/date/chinese/ChangAnTimeConverter.java @@ -9,8 +9,22 @@ import java.util.HashMap; import java.util.Map; /** - * ChangAnTimeConverter - * + * 长安时辰转换器 + *

+ * 23-1 -> 子时 + * 1-3 -> 丑时 + * 3-5 -> 寅时 + * 5-7 -> 卯时 + * 7-9 -> 辰时 + * 9-11 -> 巳时 + * 11-13 -> 午时 + * 13-15 -> 未时 + * 15-17 -> 申时 + * 17-19 -> 酉时 + * 19-21 -> 戌时 + * 21-23 -> 亥时 + * 24/-1/其他值 -> 未知 + *

* @author achao@hutool.cn */ public class ChangAnTimeConverter { @@ -33,6 +47,16 @@ public class ChangAnTimeConverter { timeMap.put("亥", new int[]{21, 23}); } + /** + * 将长安时辰转换为现代时间 + *

+ * toModernTime("子时").getBegin().getHours() -> 23 + * toModernTime("子时").getEnd().getHours() -> 1 + *

+ * + * @param changAnTime 长安时辰 + * @return 现代时间段 + */ public static DateBetween toModernTime(String changAnTime) { String time = changAnTime.replace("时", ""); int[] hours = timeMap.get(time); @@ -53,6 +77,14 @@ public class ChangAnTimeConverter { return DateBetween.of(startDate, endDate); } + /** + * 将小时转换为长安时辰 + *

+ * toChangAnTime(1) -> "子时" + *

+ * @param hour 小时 + * @return 长安时辰 + */ public static String toChangAnTime(int hour) { for (Map.Entry entry : timeMap.entrySet()) { int startHour = entry.getValue()[0]; @@ -61,7 +93,7 @@ public class ChangAnTimeConverter { return entry.getKey() + "时"; } } - return "未知时"; + return "未知"; } } diff --git a/hutool-core/src/test/java/org/dromara/hutool/core/date/chinese/ChangAnTimeConverterTest.java b/hutool-core/src/test/java/org/dromara/hutool/core/date/chinese/ChangAnTimeConverterTest.java index d14d81099..1dda622ad 100644 --- a/hutool-core/src/test/java/org/dromara/hutool/core/date/chinese/ChangAnTimeConverterTest.java +++ b/hutool-core/src/test/java/org/dromara/hutool/core/date/chinese/ChangAnTimeConverterTest.java @@ -16,22 +16,23 @@ public class ChangAnTimeConverterTest { void testToModernTimeForAllTimes() { // 测试每个时辰的转换 String[] times = {"子", "丑", "寅", "卯", "辰", "巳", "午", "未", "申", "酉", "戌", "亥"}; - int[] expectedHours = {2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2}; + int[][] expectedHours = {{23, 1}, {1, 3}, {3, 5}, {5, 7}, {7, 9}, {9, 11}, {11, 13}, {13, 15}, {15, 17}, {17, 19}, {19, 21}, {21, 23}}; for (int i = 0; i < times.length; i++) { DateBetween dateBetween = ChangAnTimeConverter.toModernTime(times[i] + "时"); - long hoursBetween = dateBetween.between(DateUnit.HOUR); - Assertions.assertEquals(expectedHours[i], hoursBetween, times[i] + "时 should last for 2 hours."); + Assertions.assertEquals(2, dateBetween.between(DateUnit.HOUR)); + Assertions.assertEquals(expectedHours[i][0], dateBetween.getBegin().getHours()); + Assertions.assertEquals(expectedHours[i][1], dateBetween.getEnd().getHours()); } } @Test void testToChangAnTimeForAllHours() { // 从23时开始测试,因为子时开始于23时 - String[] expectedTimes = {"子时", "丑时", "丑时", "寅时", "寅时", "卯时", "卯时", "辰时", "辰时", "巳时", "巳时", "午时", "午时", "未时", "未时", "申时", "申时", "酉时", "酉时", "戌时", "戌时", "亥时", "亥时", "子时"}; - for (int hour = 0; hour < 24; hour++) { + String[] expectedTimes = {"子时", "丑时", "丑时", "寅时", "寅时", "卯时", "卯时", "辰时", "辰时", "巳时", "巳时", "午时", "午时", "未时", "未时", "申时", "申时", "酉时", "酉时", "戌时", "戌时", "亥时", "亥时", "子时", "未知"}; + for (int hour = 0; hour <= 24; hour++) { String expectedTime = expectedTimes[hour]; String actualTime = ChangAnTimeConverter.toChangAnTime(hour); - Assertions.assertEquals(expectedTime, actualTime, "Hour " + hour + " should be in " + expectedTime); + Assertions.assertEquals(expectedTime, actualTime); } }