Week.of支持中文名称

This commit is contained in:
Looly 2024-06-30 17:46:22 +08:00
parent b8db9b1a8d
commit d14c8517cd
3 changed files with 91 additions and 40 deletions

View File

@ -2,7 +2,7 @@
# 🚀Changelog # 🚀Changelog
------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------
# 5.8.29(2024-06-27) # 5.8.29(2024-06-30)
### 🐣新特性 ### 🐣新特性
* 【core 】 DateUtil增加offsetYear方法 * 【core 】 DateUtil增加offsetYear方法
@ -13,6 +13,7 @@
* 【core 】 BetweenFormatter支持自定义设置单位pr#1228@Gitee * 【core 】 BetweenFormatter支持自定义设置单位pr#1228@Gitee
* 【cache 】 Cache.put变更策略对于替换的键值对不清理队列issue#3618@Github * 【cache 】 Cache.put变更策略对于替换的键值对不清理队列issue#3618@Github
* 【core 】 添加 Windows 资源管理器风格字符串比较器pr#3620@Github * 【core 】 添加 Windows 资源管理器风格字符串比较器pr#3620@Github
* 【core 】 Week.of支持中文名称issue#3637@Github
### 🐞Bug修复 ### 🐞Bug修复
* 【core 】 修复AnnotationUtil可能的空指针错误 * 【core 】 修复AnnotationUtil可能的空指针错误

View File

@ -2,6 +2,7 @@ package cn.hutool.core.date;
import cn.hutool.core.lang.Assert; import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.StrUtil;
import java.time.DayOfWeek; import java.time.DayOfWeek;
import java.util.Calendar; import java.util.Calendar;
@ -86,9 +87,9 @@ public enum Week {
* @return ISO8601规范的int值 * @return ISO8601规范的int值
* @since 5.8.0 * @since 5.8.0
*/ */
public int getIso8601Value(){ public int getIso8601Value() {
int iso8601IntValue = getValue() -1; int iso8601IntValue = getValue() - 1;
if(0 == iso8601IntValue){ if (0 == iso8601IntValue) {
iso8601IntValue = 7; iso8601IntValue = 7;
} }
return iso8601IntValue; return iso8601IntValue;
@ -172,6 +173,29 @@ public enum Week {
*/ */
public static Week of(String name) throws IllegalArgumentException { public static Week of(String name) throws IllegalArgumentException {
Assert.notBlank(name); Assert.notBlank(name);
// issue#3637
if (StrUtil.startWithAny(name, "星期", "")) {
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);
}
Week of = of(ArrayUtil.indexOfIgnoreCase(ALIASES, name) + 1); Week of = of(ArrayUtil.indexOfIgnoreCase(ALIASES, name) + 1);
if (null == of) { if (null == of) {
of = Week.valueOf(name.toUpperCase()); of = Week.valueOf(name.toUpperCase());
@ -196,7 +220,7 @@ public enum Week {
public static Week of(DayOfWeek dayOfWeek) { public static Week of(DayOfWeek dayOfWeek) {
Assert.notNull(dayOfWeek); Assert.notNull(dayOfWeek);
int week = dayOfWeek.getValue() + 1; int week = dayOfWeek.getValue() + 1;
if(8 == week){ if (8 == week) {
// 周日 // 周日
week = 1; week = 1;
} }

View File

@ -5,57 +5,83 @@ import org.junit.Test;
import java.time.DayOfWeek; import java.time.DayOfWeek;
import static org.junit.Assert.assertEquals;
public class WeekTest { public class WeekTest {
@Test @Test
public void ofTest(){ public void ofTest() {
//测试别名及大小写 //测试别名及大小写
Assert.assertEquals(Week.SUNDAY, Week.of("sun")); assertEquals(Week.SUNDAY, Week.of("sun"));
Assert.assertEquals(Week.SUNDAY, Week.of("SUN")); assertEquals(Week.SUNDAY, Week.of("SUN"));
Assert.assertEquals(Week.SUNDAY, Week.of("Sun")); assertEquals(Week.SUNDAY, Week.of("Sun"));
//测试全名及大小写 //测试全名及大小写
Assert.assertEquals(Week.SUNDAY, Week.of("sunday")); assertEquals(Week.SUNDAY, Week.of("sunday"));
Assert.assertEquals(Week.SUNDAY, Week.of("Sunday")); assertEquals(Week.SUNDAY, Week.of("Sunday"));
Assert.assertEquals(Week.SUNDAY, Week.of("SUNDAY")); assertEquals(Week.SUNDAY, Week.of("SUNDAY"));
Assert.assertEquals(Week.MONDAY, Week.of("Mon")); assertEquals(Week.MONDAY, Week.of("Mon"));
Assert.assertEquals(Week.MONDAY, Week.of("Monday")); assertEquals(Week.MONDAY, Week.of("Monday"));
Assert.assertEquals(Week.TUESDAY, Week.of("tue")); assertEquals(Week.TUESDAY, Week.of("tue"));
Assert.assertEquals(Week.TUESDAY, Week.of("tuesday")); assertEquals(Week.TUESDAY, Week.of("tuesday"));
Assert.assertEquals(Week.WEDNESDAY, Week.of("wed")); assertEquals(Week.WEDNESDAY, Week.of("wed"));
Assert.assertEquals(Week.WEDNESDAY, Week.of("WEDNESDAY")); assertEquals(Week.WEDNESDAY, Week.of("WEDNESDAY"));
Assert.assertEquals(Week.THURSDAY, Week.of("thu")); assertEquals(Week.THURSDAY, Week.of("thu"));
Assert.assertEquals(Week.THURSDAY, Week.of("THURSDAY")); assertEquals(Week.THURSDAY, Week.of("THURSDAY"));
Assert.assertEquals(Week.FRIDAY, Week.of("fri")); assertEquals(Week.FRIDAY, Week.of("fri"));
Assert.assertEquals(Week.FRIDAY, Week.of("FRIDAY")); assertEquals(Week.FRIDAY, Week.of("FRIDAY"));
Assert.assertEquals(Week.SATURDAY, Week.of("sat")); assertEquals(Week.SATURDAY, Week.of("sat"));
Assert.assertEquals(Week.SATURDAY, Week.of("SATURDAY")); assertEquals(Week.SATURDAY, Week.of("SATURDAY"));
} }
@Test @Test
public void ofTest2(){ public void ofChineseTest() {
Assert.assertEquals(Week.SUNDAY, Week.of(DayOfWeek.SUNDAY)); assertEquals(Week.SUNDAY, Week.of("星期日"));
Assert.assertEquals(Week.MONDAY, Week.of(DayOfWeek.MONDAY)); assertEquals(Week.SUNDAY, Week.of("周日"));
Assert.assertEquals(Week.TUESDAY, Week.of(DayOfWeek.TUESDAY));
Assert.assertEquals(Week.WEDNESDAY, Week.of(DayOfWeek.WEDNESDAY)); assertEquals(Week.MONDAY, Week.of("星期一"));
Assert.assertEquals(Week.THURSDAY, Week.of(DayOfWeek.THURSDAY)); assertEquals(Week.MONDAY, Week.of("周一"));
Assert.assertEquals(Week.FRIDAY, Week.of(DayOfWeek.FRIDAY));
Assert.assertEquals(Week.SATURDAY, Week.of(DayOfWeek.SATURDAY)); 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 ofTest2() {
Assert.assertEquals(DayOfWeek.MONDAY, Week.MONDAY.toJdkDayOfWeek()); assertEquals(Week.SUNDAY, Week.of(DayOfWeek.SUNDAY));
Assert.assertEquals(DayOfWeek.TUESDAY, Week.TUESDAY.toJdkDayOfWeek()); assertEquals(Week.MONDAY, Week.of(DayOfWeek.MONDAY));
Assert.assertEquals(DayOfWeek.WEDNESDAY, Week.WEDNESDAY.toJdkDayOfWeek()); assertEquals(Week.TUESDAY, Week.of(DayOfWeek.TUESDAY));
Assert.assertEquals(DayOfWeek.THURSDAY, Week.THURSDAY.toJdkDayOfWeek()); assertEquals(Week.WEDNESDAY, Week.of(DayOfWeek.WEDNESDAY));
Assert.assertEquals(DayOfWeek.FRIDAY, Week.FRIDAY.toJdkDayOfWeek()); assertEquals(Week.THURSDAY, Week.of(DayOfWeek.THURSDAY));
Assert.assertEquals(DayOfWeek.SATURDAY, Week.SATURDAY.toJdkDayOfWeek()); assertEquals(Week.FRIDAY, Week.of(DayOfWeek.FRIDAY));
Assert.assertEquals(DayOfWeek.SUNDAY, Week.SUNDAY.toJdkDayOfWeek()); assertEquals(Week.SATURDAY, Week.of(DayOfWeek.SATURDAY));
}
@Test
public void toJdkDayOfWeekTest() {
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());
} }
} }