Week.of支持中文名称

This commit is contained in:
Looly 2024-06-30 17:46:17 +08:00
parent 6a5ff924ee
commit 593af4e958
2 changed files with 94 additions and 45 deletions

View File

@ -13,6 +13,7 @@
package org.dromara.hutool.core.date; package org.dromara.hutool.core.date;
import org.dromara.hutool.core.lang.Assert; import org.dromara.hutool.core.lang.Assert;
import org.dromara.hutool.core.text.StrUtil;
import java.time.DayOfWeek; import java.time.DayOfWeek;
import java.util.Calendar; import java.util.Calendar;
@ -180,6 +181,28 @@ public enum Week {
*/ */
public static Week of(final String name) throws IllegalArgumentException { public static Week of(final String name) throws IllegalArgumentException {
if (null != name && name.length() > 1) { if (null != name && name.length() > 1) {
// issue#3637
if (StrUtil.startWithAny(name, "星期", "")) {
final char chineseNumber = name.charAt(name.length() - 1);
switch (chineseNumber) {
case '一':
return MONDAY;
case '二':
return TUESDAY;
case '三':
return WEDNESDAY;
case '四':
return THURSDAY;
case '五':
return FRIDAY;
case '六':
return SATURDAY;
case '日':
return SUNDAY;
}
throw new IllegalArgumentException("Invalid week name: " + name);
}
switch (Character.toLowerCase(name.charAt(0))) { switch (Character.toLowerCase(name.charAt(0))) {
case 'm': case 'm':
return MONDAY; // monday return MONDAY; // monday

View File

@ -12,79 +12,105 @@
package org.dromara.hutool.core.date; package org.dromara.hutool.core.date;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import java.time.DayOfWeek; import java.time.DayOfWeek;
import java.util.Calendar; import java.util.Calendar;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNull;
public class WeekTest { public class WeekTest {
@Test @Test
public void ofTest(){ public void ofTest(){
//测试别名及大小写 //测试别名及大小写
Assertions.assertEquals(Week.SUNDAY, Week.of("sun")); assertEquals(Week.SUNDAY, Week.of("sun"));
Assertions.assertEquals(Week.SUNDAY, Week.of("SUN")); assertEquals(Week.SUNDAY, Week.of("SUN"));
Assertions.assertEquals(Week.SUNDAY, Week.of("Sun")); assertEquals(Week.SUNDAY, Week.of("Sun"));
//测试全名及大小写 //测试全名及大小写
Assertions.assertEquals(Week.SUNDAY, Week.of("sunday")); assertEquals(Week.SUNDAY, Week.of("sunday"));
Assertions.assertEquals(Week.SUNDAY, Week.of("Sunday")); assertEquals(Week.SUNDAY, Week.of("Sunday"));
Assertions.assertEquals(Week.SUNDAY, Week.of("SUNDAY")); assertEquals(Week.SUNDAY, Week.of("SUNDAY"));
Assertions.assertEquals(Week.MONDAY, Week.of("Mon")); assertEquals(Week.MONDAY, Week.of("Mon"));
Assertions.assertEquals(Week.MONDAY, Week.of("Monday")); assertEquals(Week.MONDAY, Week.of("Monday"));
Assertions.assertEquals(Week.TUESDAY, Week.of("tue")); assertEquals(Week.TUESDAY, Week.of("tue"));
Assertions.assertEquals(Week.TUESDAY, Week.of("tuesday")); assertEquals(Week.TUESDAY, Week.of("tuesday"));
Assertions.assertEquals(Week.WEDNESDAY, Week.of("wed")); assertEquals(Week.WEDNESDAY, Week.of("wed"));
Assertions.assertEquals(Week.WEDNESDAY, Week.of("WEDNESDAY")); assertEquals(Week.WEDNESDAY, Week.of("WEDNESDAY"));
Assertions.assertEquals(Week.THURSDAY, Week.of("thu")); assertEquals(Week.THURSDAY, Week.of("thu"));
Assertions.assertEquals(Week.THURSDAY, Week.of("THURSDAY")); assertEquals(Week.THURSDAY, Week.of("THURSDAY"));
Assertions.assertEquals(Week.FRIDAY, Week.of("fri")); assertEquals(Week.FRIDAY, Week.of("fri"));
Assertions.assertEquals(Week.FRIDAY, Week.of("FRIDAY")); assertEquals(Week.FRIDAY, Week.of("FRIDAY"));
Assertions.assertEquals(Week.SATURDAY, Week.of("sat")); assertEquals(Week.SATURDAY, Week.of("sat"));
Assertions.assertEquals(Week.SATURDAY, Week.of("SATURDAY")); assertEquals(Week.SATURDAY, Week.of("SATURDAY"));
} }
@Test @Test
public void ofTest2(){ public void ofTest2(){
Assertions.assertEquals(Week.SUNDAY, Week.of(DayOfWeek.SUNDAY)); assertEquals(Week.SUNDAY, Week.of(DayOfWeek.SUNDAY));
Assertions.assertEquals(Week.MONDAY, Week.of(DayOfWeek.MONDAY)); assertEquals(Week.MONDAY, Week.of(DayOfWeek.MONDAY));
Assertions.assertEquals(Week.TUESDAY, Week.of(DayOfWeek.TUESDAY)); assertEquals(Week.TUESDAY, Week.of(DayOfWeek.TUESDAY));
Assertions.assertEquals(Week.WEDNESDAY, Week.of(DayOfWeek.WEDNESDAY)); assertEquals(Week.WEDNESDAY, Week.of(DayOfWeek.WEDNESDAY));
Assertions.assertEquals(Week.THURSDAY, Week.of(DayOfWeek.THURSDAY)); assertEquals(Week.THURSDAY, Week.of(DayOfWeek.THURSDAY));
Assertions.assertEquals(Week.FRIDAY, Week.of(DayOfWeek.FRIDAY)); assertEquals(Week.FRIDAY, Week.of(DayOfWeek.FRIDAY));
Assertions.assertEquals(Week.SATURDAY, Week.of(DayOfWeek.SATURDAY)); assertEquals(Week.SATURDAY, Week.of(DayOfWeek.SATURDAY));
Assertions.assertEquals(Week.SATURDAY, Week.of(Calendar.SATURDAY)); assertEquals(Week.SATURDAY, Week.of(Calendar.SATURDAY));
Assertions.assertNull(Week.of(10)); assertNull(Week.of(10));
Assertions.assertNull(Week.of(-1)); assertNull(Week.of(-1));
}
@Test
public void ofChineseTest() {
assertEquals(Week.SUNDAY, Week.of("星期日"));
assertEquals(Week.SUNDAY, Week.of("周日"));
assertEquals(Week.MONDAY, Week.of("星期一"));
assertEquals(Week.MONDAY, Week.of("周一"));
assertEquals(Week.TUESDAY, Week.of("星期二"));
assertEquals(Week.TUESDAY, Week.of("周二"));
assertEquals(Week.WEDNESDAY, Week.of("星期三"));
assertEquals(Week.WEDNESDAY, Week.of("周三"));
assertEquals(Week.THURSDAY, Week.of("星期四"));
assertEquals(Week.THURSDAY, Week.of("周四"));
assertEquals(Week.FRIDAY, Week.of("星期五"));
assertEquals(Week.FRIDAY, Week.of("周五"));
assertEquals(Week.SATURDAY, Week.of("星期六"));
assertEquals(Week.SATURDAY, Week.of("周六"));
} }
@Test @Test
public void toJdkDayOfWeekTest(){ public void toJdkDayOfWeekTest(){
Assertions.assertEquals(DayOfWeek.MONDAY, Week.MONDAY.toJdkDayOfWeek()); assertEquals(DayOfWeek.MONDAY, Week.MONDAY.toJdkDayOfWeek());
Assertions.assertEquals(DayOfWeek.TUESDAY, Week.TUESDAY.toJdkDayOfWeek()); assertEquals(DayOfWeek.TUESDAY, Week.TUESDAY.toJdkDayOfWeek());
Assertions.assertEquals(DayOfWeek.WEDNESDAY, Week.WEDNESDAY.toJdkDayOfWeek()); assertEquals(DayOfWeek.WEDNESDAY, Week.WEDNESDAY.toJdkDayOfWeek());
Assertions.assertEquals(DayOfWeek.THURSDAY, Week.THURSDAY.toJdkDayOfWeek()); assertEquals(DayOfWeek.THURSDAY, Week.THURSDAY.toJdkDayOfWeek());
Assertions.assertEquals(DayOfWeek.FRIDAY, Week.FRIDAY.toJdkDayOfWeek()); assertEquals(DayOfWeek.FRIDAY, Week.FRIDAY.toJdkDayOfWeek());
Assertions.assertEquals(DayOfWeek.SATURDAY, Week.SATURDAY.toJdkDayOfWeek()); assertEquals(DayOfWeek.SATURDAY, Week.SATURDAY.toJdkDayOfWeek());
Assertions.assertEquals(DayOfWeek.SUNDAY, Week.SUNDAY.toJdkDayOfWeek()); assertEquals(DayOfWeek.SUNDAY, Week.SUNDAY.toJdkDayOfWeek());
} }
@Test @Test
public void toChineseTest(){ public void toChineseTest(){
Assertions.assertEquals("周一",Week.MONDAY.toChinese("")); assertEquals("周一",Week.MONDAY.toChinese(""));
Assertions.assertEquals("星期一",Week.MONDAY.toChinese("星期")); assertEquals("星期一",Week.MONDAY.toChinese("星期"));
Assertions.assertEquals("星期二",Week.TUESDAY.toChinese("星期")); assertEquals("星期二",Week.TUESDAY.toChinese("星期"));
Assertions.assertEquals("星期三",Week.WEDNESDAY.toChinese("星期")); assertEquals("星期三",Week.WEDNESDAY.toChinese("星期"));
Assertions.assertEquals("星期四",Week.THURSDAY.toChinese("星期")); assertEquals("星期四",Week.THURSDAY.toChinese("星期"));
Assertions.assertEquals("星期五",Week.FRIDAY.toChinese("星期")); assertEquals("星期五",Week.FRIDAY.toChinese("星期"));
Assertions.assertEquals("星期六",Week.SATURDAY.toChinese("星期")); assertEquals("星期六",Week.SATURDAY.toChinese("星期"));
Assertions.assertEquals("星期日",Week.SUNDAY.toChinese("星期")); assertEquals("星期日",Week.SUNDAY.toChinese("星期"));
Assertions.assertEquals("星期一",Week.MONDAY.toChinese()); assertEquals("星期一",Week.MONDAY.toChinese());
} }
} }