diff --git a/hutool-core/src/main/java/cn/hutool/core/date/TimeUtil.java b/hutool-core/src/main/java/cn/hutool/core/date/TimeUtil.java index 70ec38d93..d092dd944 100644 --- a/hutool-core/src/main/java/cn/hutool/core/date/TimeUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/date/TimeUtil.java @@ -232,14 +232,21 @@ public class TimeUtil { } /** - * 解析日期时间字符串为{@link LocalDateTime},仅支持yyyy-MM-dd'T'HH:mm:ss格式,例如:2007-12-03T10:15:30
- * 即{@link DateTimeFormatter#ISO_LOCAL_DATE_TIME} + * 解析日期时间字符串为{@link LocalDateTime},支持: + * * * @param text 日期时间字符串 * @return {@link LocalDateTime} */ - public static LocalDateTime parse(final CharSequence text) { - return parse(text, (DateTimeFormatter) null); + public static LocalDateTime parseByISO(final CharSequence text) { + if (StrUtil.contains(text, 'T')) { + return parse(text, DateTimeFormatter.ISO_LOCAL_DATE_TIME); + }else{ + return parse(text, DatePattern.NORM_DATETIME_FORMATTER); + } } /** @@ -308,7 +315,7 @@ public class TimeUtil { * @return {@link LocalDate} * @since 5.3.10 */ - public static LocalDate parseDate(final CharSequence text) { + public static LocalDate parseDateByISO(final CharSequence text) { return parseDate(text, (DateTimeFormatter) null); } diff --git a/hutool-core/src/test/java/cn/hutool/core/date/ChineseDateTest.java b/hutool-core/src/test/java/cn/hutool/core/date/ChineseDateTest.java index 6f31e455a..a87a00021 100644 --- a/hutool-core/src/test/java/cn/hutool/core/date/ChineseDateTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/date/ChineseDateTest.java @@ -6,12 +6,13 @@ import org.junit.Assert; import org.junit.Test; import java.util.Date; +import java.util.Objects; public class ChineseDateTest { @Test public void chineseDateTest() { - ChineseDate date = new ChineseDate(DateUtil.parseDate("2020-01-25")); + ChineseDate date = new ChineseDate(Objects.requireNonNull(DateUtil.parse("2020-01-25"))); Assert.assertEquals("2020-01-25 00:00:00", date.getGregorianDate().toString()); Assert.assertEquals(2020, date.getChineseYear()); @@ -28,9 +29,9 @@ public class ChineseDateTest { Assert.assertEquals("春节", date.getFestivals()); Assert.assertEquals("庚子鼠年 正月初一", date.toString()); - date = new ChineseDate(DateUtil.parseDate("2020-01-14")); + date = new ChineseDate(Objects.requireNonNull(DateUtil.parse("2020-01-14"))); Assert.assertEquals("己亥猪年 腊月二十", date.toString()); - date = new ChineseDate(DateUtil.parseDate("2020-01-24")); + date = new ChineseDate(Objects.requireNonNull(DateUtil.parse("2020-01-24"))); Assert.assertEquals("己亥猪年 腊月三十", date.toString()); Assert.assertEquals("2019-12-30", date.toStringNormal()); @@ -38,16 +39,16 @@ public class ChineseDateTest { @Test public void toStringNormalTest(){ - final ChineseDate date = new ChineseDate(DateUtil.parseDate("2020-03-1")); + final ChineseDate date = new ChineseDate(Objects.requireNonNull(DateUtil.parse("2020-03-1"))); Assert.assertEquals("2020-02-08", date.toStringNormal()); } @Test public void parseTest(){ - ChineseDate date = new ChineseDate(DateUtil.parseDate("1996-07-14")); + ChineseDate date = new ChineseDate(Objects.requireNonNull(DateUtil.parse("1996-07-14"))); Assert.assertEquals("丙子鼠年 五月廿九", date.toString()); - date = new ChineseDate(DateUtil.parseDate("1996-07-15")); + date = new ChineseDate(Objects.requireNonNull(DateUtil.parse("1996-07-15"))); Assert.assertEquals("丙子鼠年 五月三十", date.toString()); } @@ -69,7 +70,7 @@ public class ChineseDateTest { @Test public void getFestivalsTest(){ // issue#I1XHSF@Gitee,2023-01-20对应农历腊月29,非除夕 - final ChineseDate chineseDate = new ChineseDate(DateUtil.parseDate("2023-01-20")); + final ChineseDate chineseDate = new ChineseDate(Objects.requireNonNull(DateUtil.parse("2023-01-20"))); Assert.assertTrue(StrUtil.isEmpty(chineseDate.getFestivals())); } @@ -77,9 +78,9 @@ public class ChineseDateTest { public void dateTest(){ // 修复这两个日期不正确的问题 // 问题出在计算与1900-01-31相差天数的问题上了,相差天数非整天 - ChineseDate date = new ChineseDate(DateUtil.parseDate("1991-09-14")); + ChineseDate date = new ChineseDate(Objects.requireNonNull(DateUtil.parse("1991-09-14"))); Assert.assertEquals("辛未羊年 八月初七", date.toString()); - date = new ChineseDate(DateUtil.parseDate("1991-09-15")); + date = new ChineseDate(Objects.requireNonNull(DateUtil.parse("1991-09-15"))); Assert.assertEquals("辛未羊年 八月初八", date.toString()); } @@ -119,7 +120,7 @@ public class ChineseDateTest { @Test public void getChineseMonthTest2(){ //https://github.com/dromara/hutool/issues/2112 - final ChineseDate springFestival = new ChineseDate(DateUtil.parseDate("2022-02-01")); + final ChineseDate springFestival = new ChineseDate(Objects.requireNonNull(DateUtil.parse("2022-02-01"))); final String chineseMonth = springFestival.getChineseMonth(); Assert.assertEquals("一月", chineseMonth); } diff --git a/hutool-core/src/test/java/cn/hutool/core/date/DateUtilTest.java b/hutool-core/src/test/java/cn/hutool/core/date/DateUtilTest.java index f33187c37..d4e40fde8 100755 --- a/hutool-core/src/test/java/cn/hutool/core/date/DateUtilTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/date/DateUtilTest.java @@ -175,8 +175,8 @@ public class DateUtilTest { @Test public void beginOfWeekTest2() { final String beginStr = "2020-03-11"; - final DateTime date = DateUtil.parseDate(beginStr); - final Calendar calendar = date.toCalendar(); + final DateTime date = DateUtil.parse(beginStr); + final Calendar calendar = Objects.requireNonNull(date).toCalendar(); final Calendar begin = DateUtil.beginOfWeek(calendar, false); Assert.assertEquals("2020-03-08 00:00:00", DateUtil.date(begin).toString()); @@ -208,7 +208,7 @@ public class DateUtilTest { @Test public void offsetMonthTest() { - final DateTime st = DateUtil.parseDate("2018-05-31"); + final DateTime st = DateUtil.parse("2018-05-31"); final List list = new ArrayList<>(); for (int i = 0; i < 4; i++) { list.add(DateUtil.offsetMonth(st, i)); @@ -534,7 +534,7 @@ public class DateUtilTest { @Test public void parseDateTest() { final String dateStr = "2018-4-10"; - final Date date = DateUtil.parseDate(dateStr); + final Date date = DateUtil.parse(dateStr); final String format = DateUtil.format(date, DatePattern.NORM_DATE_PATTERN); Assert.assertEquals("2018-04-10", format); } @@ -610,14 +610,14 @@ public class DateUtilTest { @Test public void parseUTCTest() { String dateStr1 = "2018-09-13T05:34:31Z"; - DateTime dt = DateUtil.parseUTC(dateStr1); + DateTime dt = DateUtil.parse(dateStr1); // parse方法支持UTC格式测试 final DateTime dt2 = DateUtil.parse(dateStr1); Assert.assertEquals(dt, dt2); // 默认使用Pattern对应的时区,即UTC时区 - String dateStr = dt.toString(); + String dateStr = Objects.requireNonNull(dt).toString(); Assert.assertEquals("2018-09-13 05:34:31", dateStr); // 使用当前(上海)时区 @@ -625,13 +625,13 @@ public class DateUtilTest { Assert.assertEquals("2018-09-13 13:34:31", dateStr); dateStr1 = "2018-09-13T13:34:32+0800"; - dt = DateUtil.parseUTC(dateStr1); - dateStr = dt.toString(TimeZone.getTimeZone("GMT+8:00")); + dt = DateUtil.parse(dateStr1); + dateStr = Objects.requireNonNull(dt).toString(TimeZone.getTimeZone("GMT+8:00")); Assert.assertEquals("2018-09-13 13:34:32", dateStr); dateStr1 = "2018-09-13T13:34:33+08:00"; - dt = DateUtil.parseUTC(dateStr1); - dateStr = dt.toString(TimeZone.getTimeZone("GMT+8:00")); + dt = DateUtil.parse(dateStr1); + dateStr = Objects.requireNonNull(dt).toString(TimeZone.getTimeZone("GMT+8:00")); Assert.assertEquals("2018-09-13 13:34:33", dateStr); dateStr1 = "2018-09-13T13:34:34+0800"; @@ -647,15 +647,15 @@ public class DateUtilTest { Assert.assertEquals("2018-09-13 13:34:35", dateStr); dateStr1 = "2018-09-13T13:34:36.999+0800"; - dt = DateUtil.parseUTC(dateStr1); + dt = DateUtil.parse(dateStr1); final SimpleDateFormat simpleDateFormat = new SimpleDateFormat(DatePattern.NORM_DATETIME_MS_PATTERN); simpleDateFormat.setTimeZone(TimeZone.getTimeZone("GMT+8:00")); - dateStr = dt.toString(simpleDateFormat); + dateStr = Objects.requireNonNull(dt).toString(simpleDateFormat); Assert.assertEquals("2018-09-13 13:34:36.999", dateStr); dateStr1 = "2018-09-13T13:34:37.999+08:00"; - dt = DateUtil.parseUTC(dateStr1); - dateStr = dt.toString(simpleDateFormat); + dt = DateUtil.parse(dateStr1); + dateStr = Objects.requireNonNull(dt).toString(simpleDateFormat); Assert.assertEquals("2018-09-13 13:34:37.999", dateStr); dateStr1 = "2018-09-13T13:34:38.999+0800"; @@ -683,16 +683,16 @@ public class DateUtilTest { // issue1503@Github // 检查不同毫秒长度都可以正常匹配 String utcTime = "2021-03-30T12:56:51.3Z"; - DateTime parse = DateUtil.parseUTC(utcTime); - Assert.assertEquals("2021-03-30 12:56:51", parse.toString()); + DateTime parse = DateUtil.parse(utcTime); + Assert.assertEquals("2021-03-30 12:56:51", Objects.requireNonNull(parse).toString()); utcTime = "2021-03-30T12:56:51.34Z"; - parse = DateUtil.parseUTC(utcTime); - Assert.assertEquals("2021-03-30 12:56:51", parse.toString()); + parse = DateUtil.parse(utcTime); + Assert.assertEquals("2021-03-30 12:56:51", Objects.requireNonNull(parse).toString()); utcTime = "2021-03-30T12:56:51.345Z"; - parse = DateUtil.parseUTC(utcTime); - Assert.assertEquals("2021-03-30 12:56:51", parse.toString()); + parse = DateUtil.parse(utcTime); + Assert.assertEquals("2021-03-30 12:56:51", Objects.requireNonNull(parse).toString()); } @Test @@ -704,7 +704,7 @@ public class DateUtilTest { sdf.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai")); final DateTime parse = DateUtil.parse(dateStr, sdf); - DateTime dateTime = DateUtil.parseCST(dateStr); + DateTime dateTime = DateUtil.parse(dateStr); Assert.assertEquals(parse, dateTime); dateTime = DateUtil.parse(dateStr); @@ -858,7 +858,7 @@ public class DateUtilTest { public void ageTest() { final String d1 = "2000-02-29"; final String d2 = "2018-02-28"; - final int age = DateUtil.age(DateUtil.parseDate(d1), DateUtil.parseDate(d2)); + final int age = DateUtil.age(DateUtil.parse(d1), DateUtil.parse(d2)); Assert.assertEquals(18, age); } @@ -866,19 +866,19 @@ public class DateUtilTest { public void ageTest2() { final String d1 = "2019-02-29"; final String d2 = "2018-02-28"; - DateUtil.age(DateUtil.parseDate(d1), DateUtil.parseDate(d2)); + DateUtil.age(DateUtil.parse(d1), DateUtil.parse(d2)); } @Test public void localDateTimeTest() { // 测试字符串与LocalDateTime的互相转换 final String strDate = "2019-12-01 17:02:30"; - LocalDateTime ldt = DateUtil.parseLocalDateTime(strDate); + LocalDateTime ldt = TimeUtil.parseByISO(strDate); String strDate1 = DateUtil.formatLocalDateTime(ldt); Assert.assertEquals(strDate, strDate1); final String strDate2 = "2019-12-01 17:02:30.111"; - ldt = DateUtil.parseLocalDateTime(strDate2, DatePattern.NORM_DATETIME_MS_PATTERN); + ldt = TimeUtil.parse(strDate2, DatePattern.NORM_DATETIME_MS_PATTERN); strDate1 = DateUtil.format(ldt, DatePattern.NORM_DATETIME_PATTERN); Assert.assertEquals(strDate, strDate1); } @@ -887,7 +887,7 @@ public class DateUtilTest { public void localDateTimeTest2() { // 测试字符串与LocalDateTime的互相转换 final String strDate = "2019-12-01"; - final LocalDateTime localDateTime = DateUtil.parseLocalDateTime(strDate, "yyyy-MM-dd"); + final LocalDateTime localDateTime = TimeUtil.parse(strDate, "yyyy-MM-dd"); Assert.assertEquals(strDate, DateUtil.format(localDateTime, DatePattern.NORM_DATE_PATTERN)); } @@ -905,8 +905,8 @@ public class DateUtilTest { for (int i = 0; i < 1000; i++) { final String datr = RandomUtil.randomInt(1900, 2099) + "-01-20"; final long betweenDay = DateUtil.betweenDay( - DateUtil.parseDate("1970-01-01"), - DateUtil.parseDate(datr), false); + DateUtil.parse("1970-01-01"), + DateUtil.parse(datr), false); Assert.assertEquals(Math.abs(LocalDate.parse(datr).toEpochDay()), betweenDay); } } @@ -972,7 +972,7 @@ public class DateUtilTest { String format = DateUtil.format(DateUtil.parse("2021-07-14 10:05:38"), DatePattern.NORM_DATETIME_FORMATTER); Assert.assertEquals("2021-07-14 10:05:38", format); - format = DateUtil.format(TimeUtil.parse("2021-07-14T10:05:38"), + format = DateUtil.format(TimeUtil.parseByISO("2021-07-14T10:05:38"), "yyyy-MM-dd HH:mm:ss"); Assert.assertEquals("2021-07-14 10:05:38", format); } diff --git a/hutool-core/src/test/java/cn/hutool/core/date/GanzhiTest.java b/hutool-core/src/test/java/cn/hutool/core/date/GanzhiTest.java index 533d876cf..06380a4d3 100644 --- a/hutool-core/src/test/java/cn/hutool/core/date/GanzhiTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/date/GanzhiTest.java @@ -15,7 +15,7 @@ public class GanzhiTest { @Test public void getCyclicalYMDTest(){ //通过公历构建 - final ChineseDate chineseDate = new ChineseDate(DateUtil.parseDate("1993-01-06")); + final ChineseDate chineseDate = new ChineseDate(DateUtil.parse("1993-01-06")); final String cyclicalYMD = chineseDate.getCyclicalYMD(); Assert.assertEquals("壬申年癸丑月丁亥日",cyclicalYMD); } @@ -31,7 +31,7 @@ public class GanzhiTest { @Test public void getCyclicalYMDTest3(){ //通过公历构建 - final ChineseDate chineseDate = new ChineseDate(DateUtil.parseDate("2020-08-28")); + final ChineseDate chineseDate = new ChineseDate(DateUtil.parse("2020-08-28")); final String cyclicalYMD = chineseDate.getCyclicalYMD(); Assert.assertEquals("庚子年甲申月癸卯日",cyclicalYMD); } @@ -39,7 +39,7 @@ public class GanzhiTest { @Test public void getCyclicalYMDTest4(){ //通过公历构建 - final ChineseDate chineseDate = new ChineseDate(DateUtil.parseDate("1905-08-28")); + final ChineseDate chineseDate = new ChineseDate(DateUtil.parse("1905-08-28")); final String cyclicalYMD = chineseDate.getCyclicalYMD(); Assert.assertEquals("乙巳年甲申月己亥日",cyclicalYMD); } diff --git a/hutool-core/src/test/java/cn/hutool/core/date/TimeUtilTest.java b/hutool-core/src/test/java/cn/hutool/core/date/TimeUtilTest.java index f7cf3be4d..f830c52c5 100644 --- a/hutool-core/src/test/java/cn/hutool/core/date/TimeUtilTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/date/TimeUtilTest.java @@ -59,7 +59,7 @@ public class TimeUtilTest { @Test public void parseTest4() { - final LocalDateTime localDateTime = TimeUtil.parse("2020-01-23T12:23:56"); + final LocalDateTime localDateTime = TimeUtil.parseByISO("2020-01-23T12:23:56"); Assert.assertEquals("2020-01-23T12:23:56", localDateTime.toString()); } @@ -83,7 +83,7 @@ public class TimeUtilTest { @Test public void parseDateTest() { - LocalDate localDate = TimeUtil.parseDate("2020-01-23"); + LocalDate localDate = TimeUtil.parseDateByISO("2020-01-23"); Assert.assertEquals("2020-01-23", localDate.toString()); localDate = TimeUtil.parseDate("2020-01-23T12:23:56", DateTimeFormatter.ISO_DATE_TIME); @@ -98,7 +98,7 @@ public class TimeUtilTest { @Test public void formatTest() { - final LocalDateTime localDateTime = TimeUtil.parse("2020-01-23T12:23:56"); + final LocalDateTime localDateTime = TimeUtil.parseByISO("2020-01-23T12:23:56"); String format = TimeUtil.format(localDateTime, DatePattern.NORM_DATETIME_PATTERN); Assert.assertEquals("2020-01-23 12:23:56", format); @@ -121,7 +121,7 @@ public class TimeUtilTest { @Test public void offset() { - final LocalDateTime localDateTime = TimeUtil.parse("2020-01-23T12:23:56"); + final LocalDateTime localDateTime = TimeUtil.parseByISO("2020-01-23T12:23:56"); LocalDateTime offset = TimeUtil.offset(localDateTime, 1, ChronoUnit.DAYS); // 非同一对象 Assert.assertNotSame(localDateTime, offset); @@ -135,21 +135,21 @@ public class TimeUtilTest { @Test public void between() { final Duration between = TimeUtil.between( - TimeUtil.parse("2019-02-02T00:00:00"), - TimeUtil.parse("2020-02-02T00:00:00")); + TimeUtil.parseByISO("2019-02-02T00:00:00"), + TimeUtil.parseByISO("2020-02-02T00:00:00")); Assert.assertEquals(365, between.toDays()); } @Test public void beginOfDayTest() { - final LocalDateTime localDateTime = TimeUtil.parse("2020-01-23T12:23:56"); + final LocalDateTime localDateTime = TimeUtil.parseByISO("2020-01-23T12:23:56"); final LocalDateTime beginOfDay = TimeUtil.beginOfDay(localDateTime); Assert.assertEquals("2020-01-23T00:00", beginOfDay.toString()); } @Test public void endOfDayTest() { - final LocalDateTime localDateTime = TimeUtil.parse("2020-01-23T12:23:56"); + final LocalDateTime localDateTime = TimeUtil.parseByISO("2020-01-23T12:23:56"); LocalDateTime endOfDay = TimeUtil.endOfDay(localDateTime); Assert.assertEquals("2020-01-23T23:59:59.999999999", endOfDay.toString()); @@ -197,11 +197,11 @@ public class TimeUtilTest { final LocalDateTime realStartTime = LocalDateTime.of(2022, 1, 1, 11, 49, 10); final LocalDateTime realEndTime = LocalDateTime.of(2022, 1, 1, 12, 0, 10); - final LocalDateTime realStartTime1 = DateUtil.parseLocalDateTime("2022-03-01 08:00:00"); - final LocalDateTime realEndTime1 = DateUtil.parseLocalDateTime("2022-03-01 10:00:00"); + final LocalDateTime realStartTime1 = TimeUtil.parseByISO("2022-03-01 08:00:00"); + final LocalDateTime realEndTime1 = TimeUtil.parseByISO("2022-03-01 10:00:00"); - final LocalDateTime startTime = DateUtil.parseLocalDateTime("2022-03-23 05:00:00"); - final LocalDateTime endTime = DateUtil.parseLocalDateTime("2022-03-23 13:00:00"); + final LocalDateTime startTime = TimeUtil.parseByISO("2022-03-23 05:00:00"); + final LocalDateTime endTime = TimeUtil.parseByISO("2022-03-23 13:00:00"); Assert.assertFalse(TimeUtil.isOverlap(oneStartTime,oneEndTime,realStartTime,realEndTime)); Assert.assertFalse(TimeUtil.isOverlap(oneStartTime2,oneEndTime2,realStartTime,realEndTime)); diff --git a/hutool-core/src/test/java/cn/hutool/core/date/chinese/SolarTermsTest.java b/hutool-core/src/test/java/cn/hutool/core/date/chinese/SolarTermsTest.java index e13146dc3..ab3a6dc8c 100644 --- a/hutool-core/src/test/java/cn/hutool/core/date/chinese/SolarTermsTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/date/chinese/SolarTermsTest.java @@ -67,8 +67,8 @@ public class SolarTermsTest { @Test public void getTermByDateTest() { - Assert.assertEquals("春分", SolarTerms.getTerm(DateUtil.parseDate("2021-03-20"))); - Assert.assertEquals("处暑", SolarTerms.getTerm(DateUtil.parseDate("2022-08-23"))); + Assert.assertEquals("春分", SolarTerms.getTerm(DateUtil.parse("2021-03-20"))); + Assert.assertEquals("处暑", SolarTerms.getTerm(DateUtil.parse("2022-08-23"))); } diff --git a/hutool-db/src/test/java/cn/hutool/db/OracleTest.java b/hutool-db/src/test/java/cn/hutool/db/OracleTest.java index a8130dfdc..e4be266c5 100755 --- a/hutool-db/src/test/java/cn/hutool/db/OracleTest.java +++ b/hutool-db/src/test/java/cn/hutool/db/OracleTest.java @@ -23,9 +23,9 @@ public class OracleTest { final Query query = new Query(SqlUtil.buildConditions(where), where.getTableName()); query.setPage(page); - final SqlBuilder find = SqlBuilder.of(null).query(query).orderBy(page.getOrders()); + final SqlBuilder find = SqlBuilder.of().query(query).orderBy(page.getOrders()); final int[] startEnd = page.getStartEnd(); - final SqlBuilder builder = SqlBuilder.of(null).append("SELECT * FROM ( SELECT row_.*, rownum rownum_ from ( ")// + final SqlBuilder builder = SqlBuilder.of().append("SELECT * FROM ( SELECT row_.*, rownum rownum_ from ( ")// .append(find)// .append(" ) row_ where rownum <= ").append(startEnd[1])// .append(") table_alias")// diff --git a/hutool-extra/src/test/java/cn/hutool/extra/expression/AviatorTest.java b/hutool-extra/src/test/java/cn/hutool/extra/expression/AviatorTest.java index 55c352169..41a3a7236 100755 --- a/hutool-extra/src/test/java/cn/hutool/extra/expression/AviatorTest.java +++ b/hutool-extra/src/test/java/cn/hutool/extra/expression/AviatorTest.java @@ -17,7 +17,7 @@ public class AviatorTest { @Test public void simpleTest(){ - final Foo foo = new Foo(100, 3.14f, DateUtil.parseDate("2020-11-12")); + final Foo foo = new Foo(100, 3.14f, DateUtil.parse("2020-11-12")); final ExpressionEngine engine = new AviatorEngine(); String exp = "\"[foo i=\"+ foo.i + \", f=\" + foo.f + \", date.year=\" + (foo.date.year+1900) + \", date.month=\" + foo.date.month + \", bars[0].name=\" + #foo.bars[0].name + \"]\"";