This commit is contained in:
Looly
2024-07-02 23:23:25 +08:00
parent 5c60b626cd
commit aa8d66b81a
23 changed files with 584 additions and 163 deletions

View File

@@ -379,7 +379,7 @@ public class ConvertTest {
@Test
public void toDateTest2(){
final Date date = Convert.toDate("2021-01");
Assertions.assertNull(date);
Assertions.assertEquals("2021-01-01", DateUtil.formatDate(date));
}
@Test

View File

@@ -12,18 +12,18 @@
package org.dromara.hutool.core.convert;
import org.dromara.hutool.core.date.DateTime;
import org.dromara.hutool.core.date.DateUtil;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import java.math.BigDecimal;
import java.util.Date;
import java.util.concurrent.atomic.AtomicLong;
public class ConvertToNumberTest {
@Test
public void dateToLongTest(){
final DateTime date = DateUtil.parse("2020-05-17 12:32:00");
final Date date = DateUtil.parse("2020-05-17 12:32:00");
final Long dateLong = Convert.toLong(date);
assert date != null;
Assertions.assertEquals(date.getTime(), dateLong.longValue());
@@ -31,7 +31,7 @@ public class ConvertToNumberTest {
@Test
public void dateToIntTest(){
final DateTime date = DateUtil.parse("2020-05-17 12:32:00");
final Date date = DateUtil.parse("2020-05-17 12:32:00");
final Integer dateInt = Convert.toInt(date);
assert date != null;
Assertions.assertEquals((int)date.getTime(), dateInt.intValue());
@@ -39,7 +39,7 @@ public class ConvertToNumberTest {
@Test
public void dateToAtomicLongTest(){
final DateTime date = DateUtil.parse("2020-05-17 12:32:00");
final Date date = DateUtil.parse("2020-05-17 12:32:00");
final AtomicLong dateLong = Convert.convert(AtomicLong.class, date);
assert date != null;
Assertions.assertEquals(date.getTime(), dateLong.longValue());

View File

@@ -12,11 +12,12 @@
package org.dromara.hutool.core.data;
import org.dromara.hutool.core.date.DateTime;
import org.dromara.hutool.core.date.DateUtil;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import java.util.Date;
/**
* 身份证单元测试
*
@@ -66,7 +67,7 @@ public class IdcardUtilTest {
@Test
public void getAgeTest() {
final DateTime date = DateUtil.parse("2017-04-10");
final Date date = DateUtil.parse("2017-04-10");
final int age = IdcardUtil.getAge(ID_18, date);
Assertions.assertEquals(age, 38);
@@ -171,7 +172,7 @@ public class IdcardUtilTest {
final String FOREIGN_ID_18 = "932682198501010017";
Assertions.assertTrue(IdcardUtil.isValidCard(FOREIGN_ID_18));
final DateTime date = DateUtil.parse("2017-04-10");
final Date date = DateUtil.parse("2017-04-10");
Assertions.assertEquals(IdcardUtil.getAge(FOREIGN_ID_18, date), 32);
// 新版外国人永久居留身份证

View File

@@ -20,14 +20,15 @@ import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public class Issue3081Test {
@Test
void dateRangeTest() {
final DateTime start = DateUtil.parse("2023-01-01 00:00:00");
final DateTime end = DateUtil.parse("2023-04-25 00:00:00");
final Date start = DateUtil.parse("2023-01-01 00:00:00");
final Date end = DateUtil.parse("2023-04-25 00:00:00");
final DateRange dateTimes = new DateRange(start, end, DateField.DAY_OF_MONTH, 30, true, true);

View File

@@ -131,13 +131,13 @@ public class DateTimeTest {
@Test
public void monthTest() {
//noinspection ConstantConditions
final int month = DateUtil.parse("2017-07-01").month();
final int month = DateUtil.date(DateUtil.parse("2017-07-01")).month();
Assertions.assertEquals(6, month);
}
@Test
public void weekOfYearTest() {
final DateTime date = DateUtil.parse("2016-12-27");
final DateTime date = DateUtil.date(DateUtil.parse("2016-12-27"));
//noinspection ConstantConditions
Assertions.assertEquals(2016, date.year());
//跨年的周返回的总是1

View File

@@ -13,7 +13,6 @@
package org.dromara.hutool.core.date;
import org.dromara.hutool.core.date.format.FastDateFormat;
import org.dromara.hutool.core.lang.Console;
import org.dromara.hutool.core.util.RandomUtil;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
@@ -120,7 +119,7 @@ public class DateUtilTest {
@Test
public void endOfDayTest() {
final DateTime 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());
}
@@ -335,7 +334,7 @@ public class DateUtilTest {
@Test
public void weekOfYearTest() {
// 第一周周日
final int weekOfYear1 = DateUtil.weekOfYear(DateUtil.parse("2016-01-03"));
final int weekOfYear1 = DateUtil.weekOfYear(DateUtil.date(DateUtil.parse("2016-01-03").getTime()));
Assertions.assertEquals(1, weekOfYear1);
// 第二周周四
@@ -461,7 +460,7 @@ public class DateUtilTest {
final String str = "2020-06-28T02:14:13.000Z";
final DateTime dateTime = DateUtil.parse(str);
assert dateTime != null;
Assertions.assertEquals("2020-06-28 02:14:13", dateTime.toString());
Assertions.assertEquals("2020-06-28 10:14:13", dateTime.toString());
}
/**
@@ -496,8 +495,7 @@ public class DateUtilTest {
@Test
public void parseEmptyTest() {
final String str = " ";
final DateTime dateTime = DateUtil.parse(str);
Assertions.assertNull(dateTime);
Assertions.assertThrows(IllegalArgumentException.class, () -> DateUtil.parse(str));
}
@Test
@@ -520,10 +518,10 @@ public class DateUtilTest {
final String str = "2019-09-17T13:26:17.948Z";
final DateTime dateTime = DateUtil.parse(str);
assert dateTime != null;
Assertions.assertEquals("2019-09-17 13:26:17", dateTime.toString());
Assertions.assertEquals("2019-09-17 21:26:17", dateTime.toString());
final DateTime offset = DateUtil.offsetHour(dateTime, 8);
Assertions.assertEquals("2019-09-17 21:26:17", offset.toString());
Assertions.assertEquals("2019-09-18 05:26:17", offset.toString());
}
@Test
@@ -613,7 +611,7 @@ public class DateUtilTest {
// 默认使用Pattern对应的时区即UTC时区
String dateStr = Objects.requireNonNull(dt).toString();
Assertions.assertEquals("2018-09-13 05:34:31", dateStr);
Assertions.assertEquals("2018-09-13 13:34:31", dateStr);
// 使用当前(上海)时区
dateStr = dt.toString(TimeZone.getTimeZone("GMT+8:00"));
@@ -679,15 +677,15 @@ public class DateUtilTest {
// 检查不同毫秒长度都可以正常匹配
String utcTime = "2021-03-30T12:56:51.3Z";
DateTime parse = DateUtil.parse(utcTime);
Assertions.assertEquals("2021-03-30 12:56:51", Objects.requireNonNull(parse).toString());
Assertions.assertEquals("2021-03-30 20:56:51", Objects.requireNonNull(parse).toString());
utcTime = "2021-03-30T12:56:51.34Z";
parse = DateUtil.parse(utcTime);
Assertions.assertEquals("2021-03-30 12:56:51", Objects.requireNonNull(parse).toString());
Assertions.assertEquals("2021-03-30 20:56:51", Objects.requireNonNull(parse).toString());
utcTime = "2021-03-30T12:56:51.345Z";
parse = DateUtil.parse(utcTime);
Assertions.assertEquals("2021-03-30 12:56:51", Objects.requireNonNull(parse).toString());
Assertions.assertEquals("2021-03-30 20:56:51", Objects.requireNonNull(parse).toString());
}
@Test
@@ -701,17 +699,14 @@ public class DateUtilTest {
@Test
public void parseCSTTest() {
final String dateStr = "Wed Sep 16 11:26:23 CST 2009";
final String dateStr = "Wed Sep 16 11:26:23 +0800 2009";
final SimpleDateFormat sdf = new SimpleDateFormat(DatePattern.JDK_DATETIME_PATTERN, Locale.US);
// Asia/Shanghai是以地区命名的地区标准时在中国叫CST因此如果解析CST时不使用"Asia/Shanghai"而使用"GMT+08:00",会导致相差一个小时
sdf.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));
final DateTime parse = DateUtil.parse(dateStr, sdf);
DateTime dateTime = DateUtil.parse(dateStr);
Assertions.assertEquals(parse, dateTime);
dateTime = DateUtil.parse(dateStr);
final DateTime dateTime = DateUtil.parse(dateStr);
Assertions.assertEquals(parse, dateTime);
}
@@ -740,7 +735,7 @@ public class DateUtilTest {
public void parseISOTest() {
final String dateStr = "2020-04-23T02:31:00.000Z";
final DateTime time = DateUtil.parse(dateStr);
Assertions.assertEquals("2020-04-23 02:31:00", Objects.requireNonNull(time).toString());
Assertions.assertEquals("2020-04-23 10:31:00", Objects.requireNonNull(time).toString());
}
@Test
@@ -1041,12 +1036,6 @@ public class DateUtilTest {
Assertions.assertTrue(isSameWeek2);
}
@Test
public void parseTimeTest(){
final DateTime dateTime = DateUtil.parse("12:23:34");
Console.log(dateTime);
}
@Test
@SuppressWarnings("ConstantConditions")
public void isOverlapTest() {
@@ -1114,7 +1103,7 @@ public class DateUtilTest {
final String dateStr2 = "2023-02-07T00:02:16.12345-08:00";
final DateTime dateTime2 = DateUtil.parse(dateStr2);
Assertions.assertNotNull(dateTime2);
Assertions.assertEquals("2023-02-07 00:02:16", dateTime2.toString());
Assertions.assertEquals("2023-02-07 16:02:16", dateTime2.toString());
final String dateStr3 = "2021-03-17T06:31:33.9999";
final DateTime dateTime3 = DateUtil.parse(dateStr3);
@@ -1137,7 +1126,7 @@ public class DateUtilTest {
void issueI7H34NTest() {
final DateTime parse = DateUtil.parse("2019-10-22T09:56:03.000123Z");
Assertions.assertNotNull(parse);
Assertions.assertEquals("2019-10-22 09:56:03", parse.toString());
Assertions.assertEquals("2019-10-22 17:56:03", parse.toString());
}
@Test

View File

@@ -21,10 +21,10 @@ public class Issue2612Test {
@Test
public void parseTest(){
Assertions.assertEquals("2022-09-14 23:59:00",
Assertions.assertEquals("2022-09-15 15:59:00",
Objects.requireNonNull(DateUtil.parse("2022-09-14T23:59:00-08:00")).toString());
Assertions.assertEquals("2022-09-14 23:59:00",
Assertions.assertEquals("2022-09-15 15:59:00",
Objects.requireNonNull(DateUtil.parse("2022-09-14T23:59:00-0800")).toString());
}
}

View File

@@ -12,14 +12,19 @@
package org.dromara.hutool.core.date;
import org.dromara.hutool.core.lang.Console;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
public class IssueI7QI6RTest {
// TODO 2023-8-4-1解析错误解决
@Test
@Disabled
void parseTest() {
Assertions.assertThrows(DateException.class, ()-> DateUtil.parse("2023-8-4-1"));
Assertions.assertThrows(DateException.class, ()-> DateUtil.parse("2023-8-4 1"));
Console.log(DateUtil.parse("2023-8-4-1"));
Assertions.assertThrows(DateException.class, () -> DateUtil.parse("2023-8-4-1"));
Assertions.assertThrows(DateException.class, () -> DateUtil.parse("2023-8-4 1"));
}
}

View File

@@ -21,6 +21,6 @@ public class IssueI82Y1LTest {
@Test
public void parseTest() {
final String dt1 = "2023-09-14T05:00:03.648519Z";
Assertions.assertEquals("2023-09-14 05:10:51", Objects.requireNonNull(DateUtil.parse(dt1)).toString());
Assertions.assertEquals("2023-09-14 13:00:03", Objects.requireNonNull(DateUtil.parse(dt1)).toString());
}
}

View File

@@ -1,14 +1,14 @@
package org.dromara.hutool.core.date;
import org.dromara.hutool.core.lang.Console;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import java.util.Date;
public class IssueI8IUTBTest {
@Test
@Disabled
void parseTest() {
final DateTime parse = DateUtil.parse("May 8, 2009 5:57:51 PM");
final Date parse = DateUtil.parse("May 8, 2009 5:57:51 PM");
Console.log(parse);
}
}

View File

@@ -3,34 +3,35 @@ package org.dromara.hutool.core.date;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import java.util.Date;
import java.util.Objects;
public class IssueI9C2D4Test {
@Test
public void parseHttpTest() {
final String dateStr = "Thu, 28 Mar 2024 14:33:49 GMT";
final DateTime parse = DateUtil.parse(dateStr);
Assertions.assertEquals("2024-03-28 14:33:49", Objects.requireNonNull(parse).toString());
final Date parse = DateUtil.parse(dateStr);
Assertions.assertEquals("2024-03-28 22:33:49", Objects.requireNonNull(parse).toString());
}
@Test
public void parseHttpTest2() {
final String dateStr = "星期四, 28 三月 2024 14:33:49 GMT";
final DateTime parse = DateUtil.parse(dateStr);
final Date parse = DateUtil.parse(dateStr);
Assertions.assertEquals("2024-03-28 14:33:49", Objects.requireNonNull(parse).toString());
}
@Test
public void parseTimeTest() {
final String dateStr = "15时45分59秒";
final DateTime parse = DateUtil.parse(dateStr);
final Date parse = DateUtil.parse(dateStr);
Assertions.assertEquals("15:45:59", Objects.requireNonNull(parse).toString().split(" ")[1]);
}
@Test
public void parseTimeTest2() {
final String dateStr = "15:45:59";
final DateTime parse = DateUtil.parse(dateStr);
final Date parse = DateUtil.parse(dateStr);
Assertions.assertEquals("15:45:59", Objects.requireNonNull(parse).toString().split(" ")[1]);
}
}

View File

@@ -19,6 +19,7 @@ import org.junit.jupiter.api.Test;
import java.time.*;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
@@ -36,18 +37,17 @@ public class TimeUtilTest {
@Test
public void ofTest() {
final String dateStr = "2020-01-23T12:23:56";
final DateTime dt = DateUtil.parse(dateStr);
final Date dt = DateUtil.parse(dateStr);
final LocalDateTime of = TimeUtil.of(dt);
Assertions.assertNotNull(of);
assertEquals(dateStr, of.toString());
}
@SuppressWarnings("DataFlowIssue")
@Test
public void ofUTCTest() {
final String dateStr = "2020-01-23T12:23:56Z";
final DateTime dt = DateUtil.parse(dateStr);
final Date dt = DateUtil.parse(dateStr);
final LocalDateTime of = TimeUtil.of(dt);
final LocalDateTime of2 = TimeUtil.ofUTC(dt.getTime());

View File

@@ -17,6 +17,9 @@ import org.junit.jupiter.api.Test;
import java.time.ZoneId;
import java.util.TimeZone;
import java.util.concurrent.TimeUnit;
import static org.junit.jupiter.api.Assertions.*;
public class ZoneUtilTest {
@@ -25,4 +28,53 @@ public class ZoneUtilTest {
Assertions.assertEquals(ZoneId.systemDefault(), ZoneUtil.toZoneId(null));
Assertions.assertEquals(TimeZone.getDefault(), ZoneUtil.toTimeZone(null));
}
@Test
public void testGetTimeZoneByOffsetReturnsNonNull() {
// Arrange
final int rawOffset = 8; // Example offset, you may adjust for different cases
final TimeUnit timeUnit = TimeUnit.HOURS;
// Act
final TimeZone result = ZoneUtil.getTimeZoneByOffset(rawOffset, timeUnit);
// Assert
assertNotNull(result, "Expected non-null TimeZone for valid offset and unit");
}
@Test
public void testGetTimeZoneByOffsetWithInvalidOffsetReturnsNull() {
// Arrange
final int rawOffset = 999; // Unlikely valid offset to test edge case
final TimeUnit timeUnit = TimeUnit.HOURS;
// Act
final TimeZone result = ZoneUtil.getTimeZoneByOffset(rawOffset, timeUnit);
// Assert
assertNull(result, "Expected null TimeZone for invalid offset");
}
@Test
public void testGetTimeZoneByOffsetWithNullTimeUnitThrowsException() {
// Arrange
final int rawOffset = 8;
final TimeUnit timeUnit = null; // Null unit to simulate error condition
// Act & Assert
final NullPointerException thrown = assertThrows(
NullPointerException.class,
() -> ZoneUtil.getTimeZoneByOffset(rawOffset, timeUnit),
"Expected NullPointerException for null TimeUnit"
);
assertTrue(thrown.getMessage().contains("timeUnit"), "Exception message should mention the null parameter");
}
@Test
public void testGetAvailableIDWithInvalidOffset() {
// Test with an invalid offset that should result in null or an exception.
// Assuming that an offset of 25 hours is invalid and should return null.
final String result = ZoneUtil.getAvailableID(25, TimeUnit.HOURS);
assertNull(result, "Expected null for invalid offset of 25 hours");
}
}

View File

@@ -12,6 +12,69 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
*/
public class GlobalRegexDateParserTest {
@Test
void parseYearMonthDaySplitByDashedTest() {
assertParse("2013-02-03 00:00:00", "2013-Feb-03");
assertParse("2013-02-03 00:00:00", "2013-02-03");
assertParse("2013-02-03 00:00:00", "2013-2-03");
assertParse("2013-02-03 00:00:00", "2013-2-3");
assertParse("2014-04-26 00:00:00", "2014-04-26");
assertParse("2014-04-01 00:00:00", "2014-04");
assertParse("2013-04-01 22:43:00", "2013-04-01 22:43");
assertParse("2013-04-01 22:43:22", "2013-04-01 22:43:22");
assertParse("2014-04-26 17:24:37", "2014-04-26 17:24:37.3186369");
assertParse("2012-08-03 18:31:59", "2012-08-03 18:31:59.257000000");
assertParse("2014-04-26 17:24:37", "2014-04-26 17:24:37.123");
assertParse("2014-12-16 14:20:00", "2014-12-16 06:20:00 UTC");
assertParse("2014-12-16 14:20:00", "2014-12-16 06:20:00 GMT");
assertParse("2014-04-26 17:24:37", "2014-04-26 05:24:37 PM");
assertParse("2014-04-26 13:13:43", "2014-04-26 13:13:43 +0800");
assertParse("2014-04-26 12:13:44", "2014-04-26 13:13:44 +09:00");
assertParse("2014-04-26 13:13:43", "2014-04-26 13:13:43 +0800 +08");
assertParse("2012-08-04 02:31:59", "2012-08-03 18:31:59.257000000 +0000 UTC");
assertParse("2015-10-01 02:48:56", "2015-09-30 18:48:56.35272715 +0000 UTC");
assertParse("2015-02-18 08:12:00", "2015-02-18 00:12:00 +0000 GMT");
assertParse("2015-02-18 08:12:00", "2015-02-18 00:12:00 +0000 UTC");
assertParse("2017-07-19 11:21:51", "2017-07-19 03:21:51+00:00");
assertParse("2014-05-11 08:20:13", "2014-05-11 08:20:13,787");
}
@Test
void parseYearMonthDaySplitByDashedWithMaskTest() {
assertParse("2015-02-08 08:02:00", "2015-02-08 03:02:00 +0300 MSK m=+0.000000001");
assertParse("2015-02-08 08:02:00", "2015-02-08 03:02:00.001 +0300 MSK m=+0.000000001");
}
@Test
void parseYearMonthDaySplitBySlashTest() {
assertParse("2014-03-31 00:00:00", "2014/3/31");
assertParse("2014-03-31 00:00:00", "2014/03/31");
assertParse("2014-04-08 22:05:00", "2014/4/8 22:05");
assertParse("2014-04-08 22:05:00", "2014/04/08 22:05");
assertParse("2014-04-02 03:00:51", "2014/04/2 03:00:51");
assertParse("2014-04-02 03:00:51", "2014/4/02 03:00:51");
assertParse("2012-03-19 10:11:59", "2012/03/19 10:11:59");
assertParse("2012-03-19 10:11:59", "2012/03/19 10:11:59.3186369");
}
@Test
void parseYearMonthDaySplitByChineseTest() {
assertParse("2014-04-08 00:00:00", "2014年04月08日");
assertParse("2017-02-01 12:23:45", "2017年02月01日 12时23分45秒");
assertParse("2017-02-01 12:23:45", "2017年02月01日 12:23:45");
}
@Test
void parseYearMonthDaySplitByTTest() {
assertParse("2006-01-02 23:04:05", "2006-01-02T15:04:05+0000");
assertParse("2009-08-13 13:15:09", "2009-08-12T22:15:09-07:00");
assertParse("2009-08-12 22:15:09", "2009-08-12T22:15:09+0800");
assertParse("2009-08-12 22:15:09", "2009-08-12T22:15:09+08");
assertParse("2009-08-12 22:15:09", "2009-08-12T22:15:09");
assertParse("2009-08-13 06:15:09", "2009-08-12T22:15:09Z");// Z表示UTC时间
}
@Test
void parseMonthDayYearTest() {
assertParse("1970-10-07 00:00:00", "oct 7, 1970");
@@ -21,6 +84,7 @@ public class GlobalRegexDateParserTest {
assertParse("1970-10-07 00:00:00", "October 7, 1970");
assertParse("1970-10-07 00:00:00", "October 7th, 1970");
assertParse("1970-10-07 00:00:00", "October 7th, 1970");
assertParse("1970-05-07 00:00:00", "May 7th, 1970");
}
@Test
@@ -51,15 +115,15 @@ public class GlobalRegexDateParserTest {
@Test
void parseWeekMonthDayTimeYearTest() {
assertParse("2006-01-02 15:04:05", "Mon Jan 2 15:04:05 2006");
assertParse("2006-01-02 15:04:05", "Mon Jan 2 15:04:05 MST 2006");
assertParse("2006-01-02 23:04:05", "Mon Jan 2 15:04:05 MST 2006");
assertParse("2006-01-03 06:04:05", "Mon Jan 02 15:04:05 -0700 2006");
assertParse("2015-08-10 22:44:11", "Mon Aug 10 15:44:11 UTC+0100 2015");
}
@Test
void parseWeekDayMonthYearTimeTest() {
assertParse("2006-01-02 15:04:05", "Monday, 02-Jan-06 15:04:05 MST");
assertParse("2006-01-02 15:04:05", "Mon, 02 Jan 2006 15:04:05 MST");
assertParse("2006-01-02 23:04:05", "Monday, 02-Jan-06 15:04:05 MST");
assertParse("2006-01-02 23:04:05", "Mon, 02 Jan 2006 15:04:05 MST");
assertParse("2017-07-11 22:28:13", "Tue, 11 Jul 2017 16:28:13 +0200");
assertParse("2017-07-11 22:28:13", "Tue, 11 Jul 2017 16:28:13 +0200 (CEST)");
assertParse("2006-01-03 06:04:05", "Mon, 02 Jan 2006 15:04:05 -0700");
@@ -67,7 +131,7 @@ public class GlobalRegexDateParserTest {
}
@Test
void parseDayMonthYear() {
void parseDayMonthYearTest() {
assertParse("2006-02-12 19:17:00", "12 Feb 2006, 19:17");
assertParse("2006-02-12 19:17:00", "12 Feb 2006 19:17");
assertParse("1970-10-07 00:00:00", "7 oct 70");
@@ -76,6 +140,45 @@ public class GlobalRegexDateParserTest {
assertParse("2013-07-01 00:00:00", "1 July 2013");
}
@Test
void parseDayOrMonthTest() {
assertParse("2014-03-03 00:00:00", "3.3.2014");
// 自动识别月在前
assertParse("2014-03-31 00:00:00", "3/31/2014");
assertParse("2014-03-31 00:00:00", "3.31.2014");
assertParse("2014-03-31 00:00:00", "03/31/2014");
assertParse("2014-03-31 00:00:00", "03.31.2014");
assertParse("2014-08-04 22:05:00", "4/8/2014 22:05");
assertParse("2014-08-04 22:05:00", "4/8/2014 22:05");
assertParse("2014-08-04 22:05:00", "04/08/2014 22:05");
assertParse("2014-02-04 03:00:51", "04/2/2014 03:00:51");
assertParse("1965-08-08 00:00:00", "8/8/1965 12:00:00 AM");
assertParse("1965-08-08 12:00:00", "8/8/1965 12:00:00 PM");
assertParse("1965-08-08 13:00:00", "8/8/1965 01:00 PM");
assertParse("1965-08-08 13:00:00", "8/8/1965 1:00 PM");
assertParse("1965-08-08 00:00:00", "8/8/1965 12:00 AM");
assertParse("2014-02-04 03:00:51", "4/02/2014 03:00:51");
assertParse("2012-03-19 10:11:59", "03/19/2012 10:11:59");
assertParse("2012-03-19 10:11:59", "03/19/2012 10:11:59.3186369");
}
@Test
void parsePureNumberTest() {
assertParse("2014-01-01 00:00:00", "2014");
assertParse("2014-06-01 00:00:00", "201406");
assertParse("2014-06-02 00:00:00", "20140602");
assertParse("2014-07-22 10:52:03", "20140722105203");
// unixtime(10)
assertParse("2012-03-19 18:11:59", "1332151919");
// millisecond(13)
assertParse("2013-11-12 08:32:47", "1384216367189");
// microsecond(16)
assertParse("2013-11-12 08:32:47", "1384216367111222");
// nanosecond(19)
assertParse("2013-11-12 08:32:47", "1384216367111222333");
}
private static void assertParse(final String dateStr, final String dateStrToParse) {
final Date date = GlobalRegexDateParser.parse(dateStrToParse);
assertEquals(dateStr, DateUtil.date(date).toString());

View File

@@ -20,6 +20,7 @@ import org.dromara.hutool.core.text.StrUtil;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import java.util.Date;
import java.util.List;
import java.util.NoSuchElementException;
@@ -32,8 +33,8 @@ public class RangeTest {
@Test
public void dateRangeTest() {
final DateTime start = DateUtil.parse("2017-01-01");
final DateTime end = DateUtil.parse("2017-01-02");
final DateTime start = DateUtil.parseDateTime("2017-01-01");
final DateTime end = DateUtil.parseDateTime("2017-01-02");
final Range<DateTime> range = new Range<>(start, end, (current, end1, index) -> {
if (current.isAfterOrEquals(end1)) {
@@ -51,8 +52,8 @@ public class RangeTest {
@Test
public void dateRangeFuncTest() {
final DateTime start = DateUtil.parse("2021-01-01");
final DateTime end = DateUtil.parse("2021-01-03");
final Date start = DateUtil.parse("2021-01-01");
final Date end = DateUtil.parse("2021-01-03");
final List<Integer> dayOfMonthList = DateUtil.rangeFunc(start, end, DateField.DAY_OF_YEAR, a -> DateTime.of(a).dayOfMonth());
Assertions.assertArrayEquals(dayOfMonthList.toArray(new Integer[]{}), new Integer[]{1, 2, 3});
@@ -63,8 +64,8 @@ public class RangeTest {
@Test
public void dateRangeConsumeTest() {
final DateTime start = DateUtil.parse("2021-01-01");
final DateTime end = DateUtil.parse("2021-01-03");
final Date start = DateUtil.parse("2021-01-01");
final Date end = DateUtil.parse("2021-01-03");
final StringBuilder sb = new StringBuilder();
DateUtil.rangeConsume(start, end, DateField.DAY_OF_YEAR, a -> sb.append(DateTime.of(a).dayOfMonth()).append("#"));
@@ -77,8 +78,8 @@ public class RangeTest {
@Test
public void dateRangeTest2() {
final DateTime start = DateUtil.parse("2021-01-31");
final DateTime end = DateUtil.parse("2021-03-31");
final Date start = DateUtil.parse("2021-01-31");
final Date end = DateUtil.parse("2021-03-31");
final DateRange range = DateUtil.range(start, end, DateField.MONTH);
@@ -102,8 +103,8 @@ public class RangeTest {
@Test
public void rangeByStepTest() {
final DateTime start = DateUtil.parse("2017-01-01");
final DateTime end = DateUtil.parse("2017-01-03");
final Date start = DateUtil.parse("2017-01-01");
final Date end = DateUtil.parse("2017-01-03");
// 测试包含开始和结束情况下步进为1的情况
DateRange range = DateUtil.range(start, end, DateField.DAY_OF_YEAR);
@@ -124,8 +125,8 @@ public class RangeTest {
@Test
public void rangeDayOfYearTest() {
final DateTime start = DateUtil.parse("2017-01-01");
final DateTime end = DateUtil.parse("2017-01-05");
final Date start = DateUtil.parse("2017-01-01");
final Date end = DateUtil.parse("2017-01-05");
// 测试不包含开始结束时间的情况
final DateRange range = new DateRange(start, end, DateField.DAY_OF_YEAR, 1, false, false);
@@ -141,8 +142,8 @@ public class RangeTest {
@Test
public void rangeToListTest() {
final DateTime start = DateUtil.parse("2017-01-01");
final DateTime end = DateUtil.parse("2017-01-31");
final Date start = DateUtil.parse("2017-01-01");
final Date end = DateUtil.parse("2017-01-31");
final List<DateTime> rangeToList = DateUtil.rangeToList(start, end, DateField.DAY_OF_YEAR);
Assertions.assertEquals(DateUtil.parse("2017-01-01"), rangeToList.get(0));
@@ -153,12 +154,12 @@ public class RangeTest {
@Test
public void rangeContains() {
// 开始区间
final DateTime start = DateUtil.parse("2017-01-01");
final DateTime end = DateUtil.parse("2017-01-31");
final Date start = DateUtil.parse("2017-01-01");
final Date end = DateUtil.parse("2017-01-31");
final DateRange startRange = DateUtil.range(start, end, DateField.DAY_OF_YEAR);
// 结束区间
final DateTime start1 = DateUtil.parse("2017-01-31");
final DateTime end1 = DateUtil.parse("2017-02-02");
final Date start1 = DateUtil.parse("2017-01-31");
final Date end1 = DateUtil.parse("2017-02-02");
final DateRange endRange = DateUtil.range(start1, end1, DateField.DAY_OF_YEAR);
// 交集
final List<DateTime> dateTimes = DateUtil.rangeContains(startRange, endRange);
@@ -169,12 +170,12 @@ public class RangeTest {
@Test
public void rangeNotContains() {
// 开始区间
final DateTime start = DateUtil.parse("2017-01-01");
final DateTime end = DateUtil.parse("2017-01-30");
final Date start = DateUtil.parse("2017-01-01");
final Date end = DateUtil.parse("2017-01-30");
final DateRange startRange = DateUtil.range(start, end, DateField.DAY_OF_YEAR);
// 结束区间
final DateTime start1 = DateUtil.parse("2017-01-01");
final DateTime end1 = DateUtil.parse("2017-01-31");
final Date start1 = DateUtil.parse("2017-01-01");
final Date end1 = DateUtil.parse("2017-01-31");
final DateRange endRange = DateUtil.range(start1, end1, DateField.DAY_OF_YEAR);
// 差集
final List<DateTime> dateTimes1 = DateUtil.rangeNotContains(startRange, endRange);