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;
import org.dromara.hutool.core.lang.Assert;
import org.dromara.hutool.core.text.StrUtil;
import java.time.DayOfWeek;
import java.util.Calendar;
@ -180,6 +181,28 @@ public enum Week {
*/
public static Week of(final String name) throws IllegalArgumentException {
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))) {
case 'm':
return MONDAY; // monday

View File

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