ソースを参照

fix date week bug

Looly 5 年 前
コミット
696a66f8db

+ 1 - 0
CHANGELOG.md

@@ -10,6 +10,7 @@
 ### Bug修复
 * 【http   】     修复body方法添加多余头的问题(issue#769@Github)
 * 【bloomFilter 】修复默认为int类型,左移超过32位后,高位丢失问题(pr#770@Github)
+* 【core   】     修复beginOfWeek和endOfWeek一周开始计算错误问题(issue#I1BDPW@Gitee)
 
 -------------------------------------------------------------------------------------------------------------
 

+ 2 - 6
hutool-core/src/main/java/cn/hutool/core/date/DateUtil.java

@@ -1169,9 +1169,7 @@ public class DateUtil {
 	 * @since 3.1.2
 	 */
 	public static Calendar beginOfWeek(Calendar calendar, boolean isMondayAsFirstDay) {
-		if (isMondayAsFirstDay) {
-			calendar.setFirstDayOfWeek(Calendar.MONDAY);
-		}
+		calendar.setFirstDayOfWeek(isMondayAsFirstDay ? Calendar.MONDAY : Calendar.SUNDAY);
 		// WEEK_OF_MONTH为上限的字段(不包括),实际调整的为DAY_OF_MONTH
 		return truncate(calendar, DateField.WEEK_OF_MONTH);
 	}
@@ -1195,9 +1193,7 @@ public class DateUtil {
 	 * @since 3.1.2
 	 */
 	public static Calendar endOfWeek(Calendar calendar, boolean isSundayAsLastDay) {
-		if (isSundayAsLastDay) {
-			calendar.setFirstDayOfWeek(Calendar.MONDAY);
-		}
+		calendar.setFirstDayOfWeek(isSundayAsLastDay ? Calendar.MONDAY : Calendar.SUNDAY);
 		// WEEK_OF_MONTH为上限的字段(不包括),实际调整的为DAY_OF_MONTH
 		return ceiling(calendar, DateField.WEEK_OF_MONTH);
 	}

+ 13 - 0
hutool-core/src/test/java/cn/hutool/core/date/DateUtilTest.java

@@ -115,6 +115,19 @@ public class DateUtilTest {
 	}
 
 	@Test
+	public void beginAndWeedTest2() {
+		String beginStr = "2020-03-11";
+		DateTime date = DateUtil.parseDate(beginStr);
+		Calendar calendar = date.toCalendar();
+		final Calendar begin = DateUtil.beginOfWeek(calendar, false);
+		Assert.assertEquals("2020-03-08 00:00:00", DateUtil.date(begin).toString());
+
+		Calendar calendar2 = date.toCalendar();
+		final Calendar end = DateUtil.endOfWeek(calendar2, false);
+		Assert.assertEquals("2020-03-14 23:59:59", DateUtil.date(end).toString());
+	}
+
+	@Test
 	public void offsetDateTest() {
 		String dateStr = "2017-03-01 22:33:23";
 		Date date = DateUtil.parse(dateStr);