mirror of
https://gitee.com/chinabugotech/hutool.git
synced 2025-04-19 03:01:48 +08:00
fix code
This commit is contained in:
parent
b419d8e5f5
commit
72a8e3740c
@ -97,7 +97,7 @@ public class CalendarUtil {
|
||||
* 修改日期为某个时间字段起始时间
|
||||
*
|
||||
* @param calendar {@link Calendar}
|
||||
* @param dateField 时间字段
|
||||
* @param dateField 保留到的时间字段,如定义为 {@link DateField#SECOND},表示这个字段不变,这个字段以下字段全部归0
|
||||
* @return 原{@link Calendar}
|
||||
*/
|
||||
public static Calendar truncate(Calendar calendar, DateField dateField) {
|
||||
@ -119,7 +119,7 @@ public class CalendarUtil {
|
||||
* 修改日期为某个时间字段结束时间
|
||||
*
|
||||
* @param calendar {@link Calendar}
|
||||
* @param dateField 时间字段
|
||||
* @param dateField 保留到的时间字段,如定义为 {@link DateField#SECOND},表示这个字段不变,这个字段以下字段全部取最大值
|
||||
* @return 原{@link Calendar}
|
||||
*/
|
||||
public static Calendar ceiling(Calendar calendar, DateField dateField) {
|
||||
|
@ -999,7 +999,7 @@ public class DateUtil extends CalendarUtil {
|
||||
* 修改日期为某个时间字段起始时间
|
||||
*
|
||||
* @param date {@link Date}
|
||||
* @param dateField 时间字段
|
||||
* @param dateField 保留到的时间字段,如定义为 {@link DateField#SECOND},表示这个字段不变,这个字段以下字段全部归0
|
||||
* @return {@link DateTime}
|
||||
* @since 4.5.7
|
||||
*/
|
||||
@ -1023,7 +1023,7 @@ public class DateUtil extends CalendarUtil {
|
||||
* 修改日期为某个时间字段结束时间
|
||||
*
|
||||
* @param date {@link Date}
|
||||
* @param dateField 时间字段
|
||||
* @param dateField 保留到的时间字段,如定义为 {@link DateField#SECOND},表示这个字段不变,这个字段以下字段全部取最大值
|
||||
* @return {@link DateTime}
|
||||
* @since 4.5.7
|
||||
*/
|
||||
|
@ -169,9 +169,9 @@ public class CronPattern {
|
||||
/**
|
||||
* 获取下一个最近的匹配日期时间
|
||||
*
|
||||
* @param values 时间字段值
|
||||
* @param values 时间字段值,{second, minute, hour, dayOfMonth, month, dayOfWeek, year}
|
||||
* @param zone 时区
|
||||
* @return {@link Calendar}
|
||||
* @return {@link Calendar},毫秒数为0
|
||||
*/
|
||||
private Calendar nextMatchAfter(int[] values, TimeZone zone) {
|
||||
final List<Calendar> nextMatches = new ArrayList<>(matchers.size());
|
||||
|
@ -111,14 +111,16 @@ public class PatternMatcher {
|
||||
* <li>如果此部分下个值小于给定值,回退到上一个值获取下一个新值,之后的值置为最小值</li>
|
||||
* </ul>
|
||||
*
|
||||
* @param values 时间字段值
|
||||
* @param values 时间字段值,{second, minute, hour, dayOfMonth, month, dayOfWeek, year}
|
||||
* @param zone 时区
|
||||
* @return {@link Calendar}
|
||||
* @return {@link Calendar},毫秒数为0
|
||||
*/
|
||||
public Calendar nextMatchAfter(int[] values, TimeZone zone) {
|
||||
Calendar calendar = Calendar.getInstance(zone);
|
||||
final Calendar calendar = Calendar.getInstance(zone);
|
||||
calendar.set(Calendar.MILLISECOND, 0);
|
||||
|
||||
int i = Part.YEAR.ordinal();
|
||||
// 新值,-1表示标识为回退
|
||||
int nextValue = 0;
|
||||
while (i >= 0) {
|
||||
nextValue = matchers[i].nextAfter(values[i]);
|
||||
|
@ -1,5 +1,7 @@
|
||||
package cn.hutool.cron.pattern;
|
||||
|
||||
import cn.hutool.core.date.DateField;
|
||||
import cn.hutool.core.date.DateTime;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
@ -8,6 +10,22 @@ import java.util.Calendar;
|
||||
|
||||
public class CronPatternNextMatchTest {
|
||||
|
||||
@Test
|
||||
public void nextMatchAllAfterTest() {
|
||||
// 匹配所有,返回下一秒的时间
|
||||
CronPattern pattern = new CronPattern("* * * * * * *");
|
||||
DateTime date = DateUtil.truncate(DateUtil.date(), DateField.SECOND);
|
||||
Calendar calendar = pattern.nextMatchAfter(date.toCalendar());
|
||||
Assert.assertEquals(date.getTime(), DateUtil.date(calendar).getTime());
|
||||
|
||||
// 匹配所有分,返回下一分钟
|
||||
pattern = new CronPattern("0 * * * * * *");
|
||||
date = DateUtil.parse("2022-04-08 07:44:16");
|
||||
//noinspection ConstantConditions
|
||||
calendar = pattern.nextMatchAfter(date.toCalendar());
|
||||
Assert.assertEquals(DateUtil.parse("2022-04-08 07:45:00"), DateUtil.date(calendar));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void nextMatchAfterTest(){
|
||||
CronPattern pattern = new CronPattern("23 12 * 12 * * *");
|
||||
@ -20,14 +38,21 @@ public class CronPatternNextMatchTest {
|
||||
Assert.assertTrue(pattern.match(calendar, true));
|
||||
Assert.assertEquals("2022-04-12 09:12:23", DateUtil.date(calendar).toString());
|
||||
|
||||
// 秒超出规定值的最大值,小时+1
|
||||
// 秒超出规定值的最大值,分+1,秒取最小值
|
||||
//noinspection ConstantConditions
|
||||
calendar = pattern.nextMatchAfter(
|
||||
DateUtil.parse("2022-04-12 09:09:24").toCalendar());
|
||||
Assert.assertTrue(pattern.match(calendar, true));
|
||||
Assert.assertEquals("2022-04-12 09:12:23", DateUtil.date(calendar).toString());
|
||||
|
||||
// 秒超出规定值的最大值,分不变,小时+1,秒和分使用最小值
|
||||
//noinspection ConstantConditions
|
||||
calendar = pattern.nextMatchAfter(
|
||||
DateUtil.parse("2022-04-12 09:12:24").toCalendar());
|
||||
Assert.assertTrue(pattern.match(calendar, true));
|
||||
Assert.assertEquals("2022-04-12 10:12:23", DateUtil.date(calendar).toString());
|
||||
|
||||
// 天超出规定值的最大值,月+1
|
||||
// 天超出规定值的最大值,月+1,天、时、分、秒取最小值
|
||||
//noinspection ConstantConditions
|
||||
calendar = pattern.nextMatchAfter(
|
||||
DateUtil.parse("2022-04-13 09:12:24").toCalendar());
|
||||
|
Loading…
x
Reference in New Issue
Block a user