[improve] 支持 宋以后把十二时辰中每个时辰平分为初、正两部分

This commit is contained in:
VampireAchao
2024-02-27 01:19:47 +08:00
committed by VampireAchao
parent 182ada0c11
commit 0e4fa57574
2 changed files with 105 additions and 82 deletions

View File

@@ -1,6 +1,5 @@
package org.dromara.hutool.core.date.chinese;
import org.dromara.hutool.core.date.DateBetween;
import org.dromara.hutool.core.date.DateUnit;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
@@ -13,27 +12,48 @@ import org.junit.jupiter.api.Test;
public class ShiChenTest {
@Test
void testToModernTimeForAllTimes() {
// 测试每个时辰的转换
void testToModernTime() {
// 测试“时”后缀的转换,表示整个时辰
Assertions.assertEquals(2, ShiChen.toModernTime("子时").between(DateUnit.HOUR));
// 测试“初”和“正”后缀的转换,表示时辰的前半段和后半段
Assertions.assertEquals(1, ShiChen.toModernTime("子初").between(DateUnit.HOUR));
Assertions.assertEquals(1, ShiChen.toModernTime("子正").between(DateUnit.HOUR));
// 测试所有时辰
String[] times = {"", "", "", "", "", "", "", "", "", "", "", ""};
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 = ShiChen.toModernTime(times[i] + "");
Assertions.assertEquals(2, dateBetween.between(DateUnit.HOUR));
Assertions.assertEquals(expectedHours[i][0], dateBetween.getBegin().getHours());
Assertions.assertEquals(expectedHours[i][1], dateBetween.getEnd().getHours());
for (String time : times) {
Assertions.assertEquals(2, ShiChen.toModernTime(time + "").between(DateUnit.HOUR));
Assertions.assertEquals(1, ShiChen.toModernTime(time + "").between(DateUnit.HOUR));
Assertions.assertEquals(1, ShiChen.toModernTime(time + "").between(DateUnit.HOUR));
}
Assertions.assertThrows(IllegalArgumentException.class, () -> {
ShiChen.toModernTime("无效时");
});
Assertions.assertThrows(IllegalArgumentException.class, () -> {
ShiChen.toModernTime("无效正");
});
Assertions.assertThrows(IllegalArgumentException.class, () -> {
ShiChen.toModernTime("");
});
Assertions.assertThrows(IllegalArgumentException.class, () -> {
ShiChen.toModernTime(null);
});
}
@Test
void testToChangAnTimeForAllHours() {
// 从23时开始测试因为子时开始于23时
String[] expectedTimes = {"子时", "丑时", "丑时", "寅时", "寅时", "卯时", "卯时", "辰时", "辰时", "巳时", "巳时", "午时", "午时", "未时", "未时", "申时", "申时", "酉时", "酉时", "戌时", "戌时", "亥时", "亥时", "子时", "未知"};
for (int hour = 0; hour <= 24; hour++) {
String expectedTime = expectedTimes[hour];
String actualTime = ShiChen.toChangAnTime(hour);
Assertions.assertEquals(expectedTime, actualTime);
}
void testToShiChen() {
// 测试小时转换为长安时辰,不包含“初”或“正”
Assertions.assertEquals("子时", ShiChen.toShiChen(23, true));
Assertions.assertEquals("子时", ShiChen.toShiChen(0, true));
// 测试小时转换为长安时辰,包含“初”或“正”
Assertions.assertEquals("子正", ShiChen.toShiChen(0, false));
Assertions.assertEquals("丑初", ShiChen.toShiChen(1, false));
// 测试边界条件
Assertions.assertEquals("未知", ShiChen.toShiChen(24, true));
Assertions.assertEquals("未知", ShiChen.toShiChen(-1, false));
}
}