This commit is contained in:
Looly 2024-07-31 15:46:15 +08:00
parent 1a0ae09047
commit a22f4d686a
7 changed files with 85 additions and 112 deletions

View File

@ -158,17 +158,6 @@ public class CalendarUtil {
return DateModifier.modify(calendar, dateField.getValue(), DateModifier.ModifyType.ROUND); return DateModifier.modify(calendar, dateField.getValue(), DateModifier.ModifyType.ROUND);
} }
/**
* 修改日期为某个时间字段结束时间
*
* @param calendar {@link Calendar}
* @param dateField 保留到的时间字段如定义为 {@link DateField#SECOND}表示这个字段不变这个字段以下字段全部取最大值
* @return {@link Calendar}
*/
public static Calendar ceiling(final Calendar calendar, final DateField dateField) {
return DateModifier.modify(calendar, dateField.getValue(), DateModifier.ModifyType.CEILING);
}
/** /**
* 修改日期为某个时间字段结束时间<br> * 修改日期为某个时间字段结束时间<br>
* 可选是否归零毫秒 * 可选是否归零毫秒
@ -200,12 +189,13 @@ public class CalendarUtil {
/** /**
* 修改秒级别的结束时间即毫秒设置为999 * 修改秒级别的结束时间即毫秒设置为999
* *
* @param calendar 日期 {@link Calendar} * @param calendar 日期 {@link Calendar}
* @param truncateMillisecond 是否毫秒归零
* @return {@link Calendar} * @return {@link Calendar}
* @since 4.6.2 * @since 4.6.2
*/ */
public static Calendar endOfSecond(final Calendar calendar) { public static Calendar endOfSecond(final Calendar calendar, final boolean truncateMillisecond) {
return ceiling(calendar, DateField.SECOND); return ceiling(calendar, DateField.SECOND, truncateMillisecond);
} }
/** /**
@ -221,11 +211,12 @@ public class CalendarUtil {
/** /**
* 修改某小时的结束时间 * 修改某小时的结束时间
* *
* @param calendar 日期 {@link Calendar} * @param calendar 日期 {@link Calendar}
* @param truncateMillisecond 是否毫秒归零
* @return {@link Calendar} * @return {@link Calendar}
*/ */
public static Calendar endOfHour(final Calendar calendar) { public static Calendar endOfHour(final Calendar calendar, final boolean truncateMillisecond) {
return ceiling(calendar, DateField.HOUR_OF_DAY); return ceiling(calendar, DateField.HOUR_OF_DAY, truncateMillisecond);
} }
/** /**
@ -241,11 +232,12 @@ public class CalendarUtil {
/** /**
* 修改某分钟的结束时间 * 修改某分钟的结束时间
* *
* @param calendar 日期 {@link Calendar} * @param calendar 日期 {@link Calendar}
* @param truncateMillisecond 是否毫秒归零
* @return {@link Calendar} * @return {@link Calendar}
*/ */
public static Calendar endOfMinute(final Calendar calendar) { public static Calendar endOfMinute(final Calendar calendar, final boolean truncateMillisecond) {
return ceiling(calendar, DateField.MINUTE); return ceiling(calendar, DateField.MINUTE, truncateMillisecond);
} }
/** /**
@ -261,11 +253,12 @@ public class CalendarUtil {
/** /**
* 修改某天的结束时间 * 修改某天的结束时间
* *
* @param calendar 日期 {@link Calendar} * @param calendar 日期 {@link Calendar}
* @param truncateMillisecond 是否毫秒归零
* @return {@link Calendar} * @return {@link Calendar}
*/ */
public static Calendar endOfDay(final Calendar calendar) { public static Calendar endOfDay(final Calendar calendar, final boolean truncateMillisecond) {
return ceiling(calendar, DateField.DAY_OF_MONTH); return ceiling(calendar, DateField.DAY_OF_MONTH, truncateMillisecond);
} }
/** /**
@ -292,27 +285,18 @@ public class CalendarUtil {
return truncate(calendar, DateField.WEEK_OF_MONTH); return truncate(calendar, DateField.WEEK_OF_MONTH);
} }
/**
* 修改某周的结束时间周日定为一周的结束
*
* @param calendar 日期 {@link Calendar}
* @return {@link Calendar}
*/
public static Calendar endOfWeek(final Calendar calendar) {
return endOfWeek(calendar, true);
}
/** /**
* 修改某周的结束时间 * 修改某周的结束时间
* *
* @param calendar 日期 {@link Calendar} * @param calendar 日期 {@link Calendar}
* @param isSundayAsLastDay 是否周日做为一周的最后一天false表示周六做为最后一天 * @param isSundayAsLastDay 是否周日做为一周的最后一天false表示周六做为最后一天
* @param truncateMillisecond 是否毫秒归零
* @return {@link Calendar} * @return {@link Calendar}
*/ */
public static Calendar endOfWeek(final Calendar calendar, final boolean isSundayAsLastDay) { public static Calendar endOfWeek(final Calendar calendar, final boolean isSundayAsLastDay, final boolean truncateMillisecond) {
calendar.setFirstDayOfWeek(isSundayAsLastDay ? Calendar.MONDAY : Calendar.SUNDAY); calendar.setFirstDayOfWeek(isSundayAsLastDay ? Calendar.MONDAY : Calendar.SUNDAY);
// WEEK_OF_MONTH为上限的字段不包括实际调整的为DAY_OF_MONTH // WEEK_OF_MONTH为上限的字段不包括实际调整的为DAY_OF_MONTH
return ceiling(calendar, DateField.WEEK_OF_MONTH); return ceiling(calendar, DateField.WEEK_OF_MONTH, truncateMillisecond);
} }
/** /**
@ -328,11 +312,12 @@ public class CalendarUtil {
/** /**
* 修改某月的结束时间 * 修改某月的结束时间
* *
* @param calendar 日期 {@link Calendar} * @param calendar 日期 {@link Calendar}
* @param truncateMillisecond 是否毫秒归零
* @return {@link Calendar} * @return {@link Calendar}
*/ */
public static Calendar endOfMonth(final Calendar calendar) { public static Calendar endOfMonth(final Calendar calendar, final boolean truncateMillisecond) {
return ceiling(calendar, DateField.MONTH); return ceiling(calendar, DateField.MONTH, truncateMillisecond);
} }
/** /**
@ -352,19 +337,20 @@ public class CalendarUtil {
/** /**
* 获取某季度的结束时间 * 获取某季度的结束时间
* *
* @param calendar 日期 {@link Calendar} * @param calendar 日期 {@link Calendar}
* @param truncateMillisecond 是否毫秒归零
* @return {@link Calendar} * @return {@link Calendar}
* @since 4.1.0 * @since 4.1.0
*/ */
@SuppressWarnings({"MagicConstant", "ConstantConditions"}) @SuppressWarnings({"MagicConstant", "ConstantConditions"})
public static Calendar endOfQuarter(final Calendar calendar) { public static Calendar endOfQuarter(final Calendar calendar, final boolean truncateMillisecond) {
final int year = calendar.get(Calendar.YEAR); final int year = calendar.get(Calendar.YEAR);
final int month = calendar.get(DateField.MONTH.getValue()) / 3 * 3 + 2; final int month = calendar.get(DateField.MONTH.getValue()) / 3 * 3 + 2;
final Calendar resultCal = Calendar.getInstance(calendar.getTimeZone()); final Calendar resultCal = Calendar.getInstance(calendar.getTimeZone());
resultCal.set(year, month, Month.of(month).getLastDay(DateUtil.isLeapYear(year))); resultCal.set(year, month, Month.of(month).getLastDay(DateUtil.isLeapYear(year)));
return endOfDay(resultCal); return endOfDay(resultCal, truncateMillisecond);
} }
/** /**
@ -380,11 +366,12 @@ public class CalendarUtil {
/** /**
* 修改某年的结束时间 * 修改某年的结束时间
* *
* @param calendar 日期 {@link Calendar} * @param calendar 日期 {@link Calendar}
* @param truncateMillisecond 是否毫秒归零
* @return {@link Calendar} * @return {@link Calendar}
*/ */
public static Calendar endOfYear(final Calendar calendar) { public static Calendar endOfYear(final Calendar calendar, final boolean truncateMillisecond) {
return ceiling(calendar, DateField.YEAR); return ceiling(calendar, DateField.YEAR, truncateMillisecond);
} }
// endregion // endregion
@ -611,7 +598,7 @@ public class CalendarUtil {
* @since 5.0.5 * @since 5.0.5
*/ */
public static LocalDateTime toLocalDateTime(final Calendar calendar) { public static LocalDateTime toLocalDateTime(final Calendar calendar) {
if(null == calendar){ if (null == calendar) {
return null; return null;
} }
return LocalDateTime.ofInstant(calendar.toInstant(), calendar.getTimeZone().toZoneId()); return LocalDateTime.ofInstant(calendar.toInstant(), calendar.getTimeZone().toZoneId());

View File

@ -91,7 +91,7 @@ public class DateModifier {
break; break;
} }
// 处理下一级别字段 // 处理下一级别字段
return modify(calendar, dateField + 1, modifyType); return modify(calendar, dateField + 1, modifyType, truncateMillisecond);
} }
final int endField = truncateMillisecond ? Calendar.SECOND : Calendar.MILLISECOND; final int endField = truncateMillisecond ? Calendar.SECOND : Calendar.MILLISECOND;

View File

@ -831,18 +831,6 @@ public class DateUtil {
return new DateTime(CalendarUtil.round(CalendarUtil.calendar(date), dateField)); return new DateTime(CalendarUtil.round(CalendarUtil.calendar(date), dateField));
} }
/**
* 修改日期为某个时间字段结束时间
*
* @param date {@link Date}
* @param dateField 保留到的时间字段如定义为 {@link DateField#SECOND}表示这个字段不变这个字段以下字段全部取最大值
* @return {@link DateTime}
* @since 4.5.7
*/
public static DateTime ceiling(final Date date, final DateField dateField) {
return new DateTime(CalendarUtil.ceiling(CalendarUtil.calendar(date), dateField));
}
/** /**
* 修改日期为某个时间字段结束时间<br> * 修改日期为某个时间字段结束时间<br>
* 可选是否归零毫秒 * 可选是否归零毫秒
@ -876,11 +864,12 @@ public class DateUtil {
* 获取秒级别的结束时间即毫秒设置为999 * 获取秒级别的结束时间即毫秒设置为999
* *
* @param date 日期 * @param date 日期
* @param truncateMillisecond 是否毫秒归零
* @return {@link DateTime} * @return {@link DateTime}
* @since 4.6.2 * @since 4.6.2
*/ */
public static DateTime endOfSecond(final Date date) { public static DateTime endOfSecond(final Date date, final boolean truncateMillisecond) {
return new DateTime(CalendarUtil.endOfSecond(CalendarUtil.calendar(date))); return new DateTime(CalendarUtil.endOfSecond(CalendarUtil.calendar(date), truncateMillisecond));
} }
/** /**
@ -897,10 +886,11 @@ public class DateUtil {
* 获取某小时的结束时间 * 获取某小时的结束时间
* *
* @param date 日期 * @param date 日期
* @param truncateMillisecond 是否毫秒归零
* @return {@link DateTime} * @return {@link DateTime}
*/ */
public static DateTime endOfHour(final Date date) { public static DateTime endOfHour(final Date date, final boolean truncateMillisecond) {
return new DateTime(CalendarUtil.endOfHour(CalendarUtil.calendar(date))); return new DateTime(CalendarUtil.endOfHour(CalendarUtil.calendar(date), truncateMillisecond));
} }
/** /**
@ -917,10 +907,11 @@ public class DateUtil {
* 获取某分钟的结束时间 * 获取某分钟的结束时间
* *
* @param date 日期 * @param date 日期
* @param truncateMillisecond 是否毫秒归零
* @return {@link DateTime} * @return {@link DateTime}
*/ */
public static DateTime endOfMinute(final Date date) { public static DateTime endOfMinute(final Date date, final boolean truncateMillisecond) {
return new DateTime(CalendarUtil.endOfMinute(CalendarUtil.calendar(date))); return new DateTime(CalendarUtil.endOfMinute(CalendarUtil.calendar(date), truncateMillisecond));
} }
/** /**
@ -937,10 +928,11 @@ public class DateUtil {
* 获取某天的结束时间 * 获取某天的结束时间
* *
* @param date 日期 * @param date 日期
* @param truncateMillisecond 是否毫秒归零
* @return {@link DateTime} * @return {@link DateTime}
*/ */
public static DateTime endOfDay(final Date date) { public static DateTime endOfDay(final Date date, final boolean truncateMillisecond) {
return new DateTime(CalendarUtil.endOfDay(CalendarUtil.calendar(date))); return new DateTime(CalendarUtil.endOfDay(CalendarUtil.calendar(date), truncateMillisecond));
} }
/** /**
@ -965,26 +957,17 @@ public class DateUtil {
return new DateTime(CalendarUtil.beginOfWeek(CalendarUtil.calendar(date), isMondayAsFirstDay)); return new DateTime(CalendarUtil.beginOfWeek(CalendarUtil.calendar(date), isMondayAsFirstDay));
} }
/**
* 获取某周的结束时间周日定为一周的结束
*
* @param date 日期
* @return {@link DateTime}
*/
public static DateTime endOfWeek(final Date date) {
return new DateTime(CalendarUtil.endOfWeek(CalendarUtil.calendar(date)));
}
/** /**
* 获取某周的结束时间 * 获取某周的结束时间
* *
* @param date 日期 * @param date 日期
* @param isSundayAsLastDay 是否周日做为一周的最后一天false表示周六做为最后一天 * @param isSundayAsLastDay 是否周日做为一周的最后一天false表示周六做为最后一天
* @param truncateMillisecond 是否毫秒归零
* @return {@link DateTime} * @return {@link DateTime}
* @since 5.4.0 * @since 5.4.0
*/ */
public static DateTime endOfWeek(final Date date, final boolean isSundayAsLastDay) { public static DateTime endOfWeek(final Date date, final boolean isSundayAsLastDay, final boolean truncateMillisecond) {
return new DateTime(CalendarUtil.endOfWeek(CalendarUtil.calendar(date), isSundayAsLastDay)); return new DateTime(CalendarUtil.endOfWeek(CalendarUtil.calendar(date), isSundayAsLastDay, truncateMillisecond));
} }
/** /**
@ -1001,10 +984,11 @@ public class DateUtil {
* 获取某月的结束时间 * 获取某月的结束时间
* *
* @param date 日期 * @param date 日期
* @param truncateMillisecond 是否毫秒归零
* @return {@link DateTime} * @return {@link DateTime}
*/ */
public static DateTime endOfMonth(final Date date) { public static DateTime endOfMonth(final Date date, final boolean truncateMillisecond) {
return new DateTime(CalendarUtil.endOfMonth(CalendarUtil.calendar(date))); return new DateTime(CalendarUtil.endOfMonth(CalendarUtil.calendar(date), truncateMillisecond));
} }
/** /**
@ -1021,10 +1005,11 @@ public class DateUtil {
* 获取某季度的结束时间 * 获取某季度的结束时间
* *
* @param date 日期 * @param date 日期
* @param truncateMillisecond 是否毫秒归零
* @return {@link DateTime} * @return {@link DateTime}
*/ */
public static DateTime endOfQuarter(final Date date) { public static DateTime endOfQuarter(final Date date, final boolean truncateMillisecond) {
return new DateTime(CalendarUtil.endOfQuarter(CalendarUtil.calendar(date))); return new DateTime(CalendarUtil.endOfQuarter(CalendarUtil.calendar(date), truncateMillisecond));
} }
/** /**
@ -1041,10 +1026,11 @@ public class DateUtil {
* 获取某年的结束时间 * 获取某年的结束时间
* *
* @param date 日期 * @param date 日期
* @param truncateMillisecond 是否毫秒归零
* @return {@link DateTime} * @return {@link DateTime}
*/ */
public static DateTime endOfYear(final Date date) { public static DateTime endOfYear(final Date date, final boolean truncateMillisecond) {
return new DateTime(CalendarUtil.endOfYear(CalendarUtil.calendar(date))); return new DateTime(CalendarUtil.endOfYear(CalendarUtil.calendar(date), truncateMillisecond));
} }
/** /**

View File

@ -85,52 +85,52 @@ public class DateModifierTest {
final Date date = DateUtil.parse(dateStr); final Date date = DateUtil.parse(dateStr);
// 毫秒 // 毫秒
DateTime begin = DateUtil.ceiling(date, DateField.MILLISECOND); DateTime begin = DateUtil.ceiling(date, DateField.MILLISECOND, false);
Assertions.assertEquals(dateStr, begin.toString(DatePattern.NORM_DATETIME_MS_PATTERN)); Assertions.assertEquals(dateStr, begin.toString(DatePattern.NORM_DATETIME_MS_PATTERN));
// //
begin = DateUtil.ceiling(date, DateField.SECOND); begin = DateUtil.ceiling(date, DateField.SECOND, false);
Assertions.assertEquals("2017-03-01 22:33:23.999", begin.toString(DatePattern.NORM_DATETIME_MS_PATTERN)); Assertions.assertEquals("2017-03-01 22:33:23.999", begin.toString(DatePattern.NORM_DATETIME_MS_PATTERN));
// //
begin = DateUtil.ceiling(date, DateField.MINUTE); begin = DateUtil.ceiling(date, DateField.MINUTE, false);
Assertions.assertEquals("2017-03-01 22:33:59.999", begin.toString(DatePattern.NORM_DATETIME_MS_PATTERN)); Assertions.assertEquals("2017-03-01 22:33:59.999", begin.toString(DatePattern.NORM_DATETIME_MS_PATTERN));
// 小时 // 小时
begin = DateUtil.ceiling(date, DateField.HOUR); begin = DateUtil.ceiling(date, DateField.HOUR, false);
Assertions.assertEquals("2017-03-01 22:59:59.999", begin.toString(DatePattern.NORM_DATETIME_MS_PATTERN)); Assertions.assertEquals("2017-03-01 22:59:59.999", begin.toString(DatePattern.NORM_DATETIME_MS_PATTERN));
begin = DateUtil.ceiling(date, DateField.HOUR_OF_DAY); begin = DateUtil.ceiling(date, DateField.HOUR_OF_DAY, false);
Assertions.assertEquals("2017-03-01 22:59:59.999", begin.toString(DatePattern.NORM_DATETIME_MS_PATTERN)); Assertions.assertEquals("2017-03-01 22:59:59.999", begin.toString(DatePattern.NORM_DATETIME_MS_PATTERN));
// 上下午原始日期是22点上下午的结束就是23点 // 上下午原始日期是22点上下午的结束就是23点
begin = DateUtil.ceiling(date, DateField.AM_PM); begin = DateUtil.ceiling(date, DateField.AM_PM, false);
Assertions.assertEquals("2017-03-01 23:59:59.999", begin.toString(DatePattern.NORM_DATETIME_MS_PATTERN)); Assertions.assertEquals("2017-03-01 23:59:59.999", begin.toString(DatePattern.NORM_DATETIME_MS_PATTERN));
// day of xxx按照day处理 // day of xxx按照day处理
begin = DateUtil.ceiling(date, DateField.DAY_OF_WEEK_IN_MONTH); begin = DateUtil.ceiling(date, DateField.DAY_OF_WEEK_IN_MONTH, false);
Assertions.assertEquals("2017-03-01 23:59:59.999", begin.toString(DatePattern.NORM_DATETIME_MS_PATTERN)); Assertions.assertEquals("2017-03-01 23:59:59.999", begin.toString(DatePattern.NORM_DATETIME_MS_PATTERN));
begin = DateUtil.ceiling(date, DateField.DAY_OF_WEEK); begin = DateUtil.ceiling(date, DateField.DAY_OF_WEEK, false);
Assertions.assertEquals("2017-03-01 23:59:59.999", begin.toString(DatePattern.NORM_DATETIME_MS_PATTERN)); Assertions.assertEquals("2017-03-01 23:59:59.999", begin.toString(DatePattern.NORM_DATETIME_MS_PATTERN));
begin = DateUtil.ceiling(date, DateField.DAY_OF_MONTH); begin = DateUtil.ceiling(date, DateField.DAY_OF_MONTH, false);
Assertions.assertEquals("2017-03-01 23:59:59.999", begin.toString(DatePattern.NORM_DATETIME_MS_PATTERN)); Assertions.assertEquals("2017-03-01 23:59:59.999", begin.toString(DatePattern.NORM_DATETIME_MS_PATTERN));
// 星期 // 星期
begin = DateUtil.ceiling(date, DateField.WEEK_OF_MONTH); begin = DateUtil.ceiling(date, DateField.WEEK_OF_MONTH, false);
Assertions.assertEquals("2017-03-05 23:59:59.999", begin.toString(DatePattern.NORM_DATETIME_MS_PATTERN)); Assertions.assertEquals("2017-03-05 23:59:59.999", begin.toString(DatePattern.NORM_DATETIME_MS_PATTERN));
begin = DateUtil.ceiling(date, DateField.WEEK_OF_YEAR); begin = DateUtil.ceiling(date, DateField.WEEK_OF_YEAR, false);
Assertions.assertEquals("2017-03-05 23:59:59.999", begin.toString(DatePattern.NORM_DATETIME_MS_PATTERN)); Assertions.assertEquals("2017-03-05 23:59:59.999", begin.toString(DatePattern.NORM_DATETIME_MS_PATTERN));
// //
begin = DateUtil.ceiling(date, DateField.MONTH); begin = DateUtil.ceiling(date, DateField.MONTH, false);
Assertions.assertEquals("2017-03-31 23:59:59.999", begin.toString(DatePattern.NORM_DATETIME_MS_PATTERN)); Assertions.assertEquals("2017-03-31 23:59:59.999", begin.toString(DatePattern.NORM_DATETIME_MS_PATTERN));
// //
begin = DateUtil.ceiling(date, DateField.YEAR); begin = DateUtil.ceiling(date, DateField.YEAR, false);
Assertions.assertEquals("2017-12-31 23:59:59.999", begin.toString(DatePattern.NORM_DATETIME_MS_PATTERN)); Assertions.assertEquals("2017-12-31 23:59:59.999", begin.toString(DatePattern.NORM_DATETIME_MS_PATTERN));
} }
@Test @Test
public void roundTest(){ public void roundTest() {
// issues#I5M2I0 // issues#I5M2I0
final String dateStr = "2022-08-12 14:59:21.500"; final String dateStr = "2022-08-12 14:59:21.500";
final Date date = DateUtil.parse(dateStr); final Date date = DateUtil.parse(dateStr);

View File

@ -92,7 +92,7 @@ public class DateTimeTest {
// 精确到毫秒 // 精确到毫秒
final DateTime endTime = new DateTime("2017-12-31 23:59:59.999", DatePattern.NORM_DATETIME_MS_FORMAT); final DateTime endTime = new DateTime("2017-12-31 23:59:59.999", DatePattern.NORM_DATETIME_MS_FORMAT);
dateTime = DateUtil.endOfQuarter(dateTime); dateTime = DateUtil.endOfQuarter(dateTime, false);
Assertions.assertEquals(endTime, dateTime); Assertions.assertEquals(endTime, dateTime);
} }

View File

@ -113,14 +113,14 @@ public class DateUtilTest {
final Date beginOfDay = DateUtil.beginOfDay(date); final Date beginOfDay = DateUtil.beginOfDay(date);
Assertions.assertEquals("2017-03-01 00:00:00", beginOfDay.toString()); Assertions.assertEquals("2017-03-01 00:00:00", beginOfDay.toString());
// 一天的结束 // 一天的结束
final Date endOfDay = DateUtil.endOfDay(date); final Date endOfDay = DateUtil.endOfDay(date, false);
Assertions.assertEquals("2017-03-01 23:59:59", endOfDay.toString()); Assertions.assertEquals("2017-03-01 23:59:59", endOfDay.toString());
} }
@Test @Test
public void endOfDayTest() { public void endOfDayTest() {
final Date parse = DateUtil.parse("2020-05-31 00:00:00"); final Date parse = DateUtil.parse("2020-05-31 00:00:00");
Assertions.assertEquals("2020-05-31 23:59:59", DateUtil.endOfDay(parse).toString()); Assertions.assertEquals("2020-05-31 23:59:59", DateUtil.endOfDay(parse, false).toString());
} }
@Test @Test
@ -137,7 +137,7 @@ public class DateUtilTest {
final Date date2 = DateUtil.parse(dateStr2); final Date date2 = DateUtil.parse(dateStr2);
DateTime dateTime = DateUtil.ceiling(date2, DateField.MINUTE); DateTime dateTime = DateUtil.ceiling(date2, DateField.MINUTE, false);
Assertions.assertEquals("2020-02-29 12:59:59.999", dateTime.toString(DatePattern.NORM_DATETIME_MS_PATTERN)); Assertions.assertEquals("2020-02-29 12:59:59.999", dateTime.toString(DatePattern.NORM_DATETIME_MS_PATTERN));
dateTime = DateUtil.ceiling(date2, DateField.MINUTE, true); dateTime = DateUtil.ceiling(date2, DateField.MINUTE, true);
@ -150,7 +150,7 @@ public class DateUtilTest {
final Date date2 = DateUtil.parse(dateStr2); final Date date2 = DateUtil.parse(dateStr2);
DateTime dateTime = DateUtil.ceiling(date2, DateField.DAY_OF_MONTH); DateTime dateTime = DateUtil.ceiling(date2, DateField.DAY_OF_MONTH, false);
Assertions.assertEquals("2020-02-29 23:59:59.999", dateTime.toString(DatePattern.NORM_DATETIME_MS_PATTERN)); Assertions.assertEquals("2020-02-29 23:59:59.999", dateTime.toString(DatePattern.NORM_DATETIME_MS_PATTERN));
dateTime = DateUtil.ceiling(date2, DateField.DAY_OF_MONTH, true); dateTime = DateUtil.ceiling(date2, DateField.DAY_OF_MONTH, true);
@ -167,7 +167,7 @@ public class DateUtilTest {
final Date beginOfWeek = DateUtil.beginOfWeek(date); final Date beginOfWeek = DateUtil.beginOfWeek(date);
Assertions.assertEquals("2017-02-27 00:00:00", beginOfWeek.toString()); Assertions.assertEquals("2017-02-27 00:00:00", beginOfWeek.toString());
// 一周的结束 // 一周的结束
final Date endOfWeek = DateUtil.endOfWeek(date); final Date endOfWeek = DateUtil.endOfWeek(date, true, false);
Assertions.assertEquals("2017-03-05 23:59:59", endOfWeek.toString()); Assertions.assertEquals("2017-03-05 23:59:59", endOfWeek.toString());
final Calendar calendar = CalendarUtil.calendar(date); final Calendar calendar = CalendarUtil.calendar(date);
@ -175,7 +175,7 @@ public class DateUtilTest {
final Calendar begin = CalendarUtil.beginOfWeek(calendar); final Calendar begin = CalendarUtil.beginOfWeek(calendar);
Assertions.assertEquals("2017-02-27 00:00:00", DateUtil.date(begin).toString()); Assertions.assertEquals("2017-02-27 00:00:00", DateUtil.date(begin).toString());
// 一周的结束 // 一周的结束
final Calendar end = CalendarUtil.endOfWeek(calendar); final Calendar end = CalendarUtil.endOfWeek(calendar, true, false);
Assertions.assertEquals("2017-03-05 23:59:59", DateUtil.date(end).toString()); Assertions.assertEquals("2017-03-05 23:59:59", DateUtil.date(end).toString());
} }
@ -188,7 +188,7 @@ public class DateUtilTest {
Assertions.assertEquals("2020-03-08 00:00:00", DateUtil.date(begin).toString()); Assertions.assertEquals("2020-03-08 00:00:00", DateUtil.date(begin).toString());
final Calendar calendar2 = date.toCalendar(); final Calendar calendar2 = date.toCalendar();
final Calendar end = CalendarUtil.endOfWeek(calendar2, false); final Calendar end = CalendarUtil.endOfWeek(calendar2, false, false);
Assertions.assertEquals("2020-03-14 23:59:59", DateUtil.date(end).toString()); Assertions.assertEquals("2020-03-14 23:59:59", DateUtil.date(end).toString());
} }
@ -743,14 +743,14 @@ public class DateUtilTest {
public void endOfYearTest() { public void endOfYearTest() {
final DateTime date = DateUtil.now(); final DateTime date = DateUtil.now();
date.setField(DateField.YEAR, 2019); date.setField(DateField.YEAR, 2019);
final DateTime endOfYear = DateUtil.endOfYear(date); final DateTime endOfYear = DateUtil.endOfYear(date, false);
Assertions.assertEquals("2019-12-31 23:59:59", endOfYear.toString()); Assertions.assertEquals("2019-12-31 23:59:59", endOfYear.toString());
} }
@Test @Test
public void endOfQuarterTest() { public void endOfQuarterTest() {
final Date date = DateUtil.endOfQuarter( final Date date = DateUtil.endOfQuarter(
DateUtil.parse("2020-05-31 00:00:00")); DateUtil.parse("2020-05-31 00:00:00"), false);
Assertions.assertEquals("2020-06-30 23:59:59", DateUtil.format(date, "yyyy-MM-dd HH:mm:ss")); Assertions.assertEquals("2020-06-30 23:59:59", DateUtil.format(date, "yyyy-MM-dd HH:mm:ss"));
} }
@ -762,7 +762,7 @@ public class DateUtilTest {
final DateTime startOfWeek = DateUtil.beginOfWeek(now); final DateTime startOfWeek = DateUtil.beginOfWeek(now);
Assertions.assertEquals("2019-09-09 00:00:00", startOfWeek.toString()); Assertions.assertEquals("2019-09-09 00:00:00", startOfWeek.toString());
final DateTime endOfWeek = DateUtil.endOfWeek(now); final DateTime endOfWeek = DateUtil.endOfWeek(now, true, false);
Assertions.assertEquals("2019-09-15 23:59:59", endOfWeek.toString()); Assertions.assertEquals("2019-09-15 23:59:59", endOfWeek.toString());
final long between = DateUtil.between(endOfWeek, startOfWeek, DateUnit.DAY); final long between = DateUtil.between(endOfWeek, startOfWeek, DateUnit.DAY);

View File

@ -50,7 +50,7 @@ public class CronPatternUtil {
* @return 日期列表 * @return 日期列表
*/ */
public static List<Date> matchedDates(final String patternStr, final Date start, final int count) { public static List<Date> matchedDates(final String patternStr, final Date start, final int count) {
return matchedDates(patternStr, start, DateUtil.endOfYear(start), count); return matchedDates(patternStr, start, DateUtil.endOfYear(start, false), count);
} }
/** /**