add method

This commit is contained in:
Looly 2021-09-28 00:14:58 +08:00
parent 9642fa8862
commit 1072639f3b
4 changed files with 43 additions and 15 deletions

View File

@ -3,7 +3,7 @@
------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------
# 5.7.14 (2021-09-27) # 5.7.14 (2021-09-28)
### 🐣新特性 ### 🐣新特性
* 【extra 】 修复HttpCookie设置cookies的方法不符合RFC6265规范问题issue#I4B70D@Gitee * 【extra 】 修复HttpCookie设置cookies的方法不符合RFC6265规范问题issue#I4B70D@Gitee
@ -13,6 +13,7 @@
* 【core 】 DateConverter修改返回java.util.Date而非DateTimeissue#I4BOAP@Gitee * 【core 】 DateConverter修改返回java.util.Date而非DateTimeissue#I4BOAP@Gitee
* 【core 】 增加IterableIter、ComputeIter * 【core 】 增加IterableIter、ComputeIter
* 【core 】 CsvConfig增加disableComment方法issue#1842@Github * 【core 】 CsvConfig增加disableComment方法issue#1842@Github
* 【core 】 DateTime构造和DateUtil.parse可选是否宽松模式issue#1849@Github
### 🐞Bug修复 ### 🐞Bug修复
* 【http 】 修复HttpCookie设置cookies的方法不符合RFC6265规范问题pr#418@Gitee * 【http 】 修复HttpCookie设置cookies的方法不符合RFC6265规范问题pr#418@Gitee

View File

@ -287,7 +287,19 @@ public class DateTime extends Date {
* @see DatePattern * @see DatePattern
*/ */
public DateTime(CharSequence dateStr, DateParser dateParser) { public DateTime(CharSequence dateStr, DateParser dateParser) {
this(parse(dateStr, dateParser)); this(dateStr, dateParser, true);
}
/**
* 构造
*
* @param dateStr Date字符串
* @param dateParser 格式化器 {@link DateParser}可以使用 {@link FastDateFormat}
* @param lenient 是否宽容模式
* @see DatePattern
*/
public DateTime(CharSequence dateStr, DateParser dateParser, boolean lenient) {
this(parse(dateStr, dateParser, lenient));
} }
// -------------------------------------------------------------------- Constructor end // -------------------------------------------------------------------- Constructor end
@ -1017,13 +1029,14 @@ public class DateTime extends Date {
* *
* @param dateStr 日期字符串 * @param dateStr 日期字符串
* @param parser {@link FastDateFormat} * @param parser {@link FastDateFormat}
* @return {@link Date} * @param lenient 是否宽容模式
* @return {@link Calendar}
*/ */
private static Calendar parse(CharSequence dateStr, DateParser parser) { private static Calendar parse(CharSequence dateStr, DateParser parser, boolean lenient) {
Assert.notNull(parser, "Parser or DateFromat must be not null !"); Assert.notNull(parser, "Parser or DateFromat must be not null !");
Assert.notBlank(dateStr, "Date String must be not blank !"); Assert.notBlank(dateStr, "Date String must be not blank !");
final Calendar calendar = CalendarUtil.parse(dateStr, true, parser); final Calendar calendar = CalendarUtil.parse(dateStr, lenient, parser);
if (null == calendar) { if (null == calendar) {
throw new DateException("Parse [{}] with format [{}] error!", dateStr, parser.getPattern()); throw new DateException("Parse [{}] with format [{}] error!", dateStr, parser.getPattern());
} }

View File

@ -683,6 +683,19 @@ public class DateUtil extends CalendarUtil {
return new DateTime(dateStr, parser); return new DateTime(dateStr, parser);
} }
/**
* 构建DateTime对象
*
* @param dateStr Date字符串
* @param parser 格式化器,{@link FastDateFormat}
* @param lenient 是否宽容模式
* @return DateTime对象
* @since 5.7.14
*/
public static DateTime parse(CharSequence dateStr, DateParser parser, boolean lenient) {
return new DateTime(dateStr, parser);
}
/** /**
* 构建DateTime对象 * 构建DateTime对象
* *

View File

@ -1,6 +1,5 @@
package cn.hutool.core.date; package cn.hutool.core.date;
import cn.hutool.core.lang.Console;
import org.junit.Assert; import org.junit.Assert;
import org.junit.Test; import org.junit.Test;
@ -133,10 +132,12 @@ public class DateTimeTest {
Assert.assertEquals(1, date.weekOfYear()); Assert.assertEquals(1, date.weekOfYear());
} }
@Test /**
* 严格模式下不允许非常规的数字如秒部分最多5999则报错
*/
@Test(expected = IllegalArgumentException.class)
public void ofTest(){ public void ofTest(){
String a = "2021-09-27 00:00:99"; String a = "2021-09-27 00:00:99";
final DateTime dateTime = new DateTime(a, DatePattern.NORM_DATETIME_FORMAT); new DateTime(a, DatePattern.NORM_DATETIME_FORMAT, false);
Console.log(dateTime);
} }
} }