mirror of
https://gitee.com/dromara/hutool.git
synced 2025-04-24 18:04:54 +08:00
fix code
This commit is contained in:
parent
e4999ca6f6
commit
6cd802e9ac
@ -31,7 +31,7 @@ import java.util.regex.Pattern;
|
|||||||
* <li>yyyy-MM-dd HH:mm:ss.SSS 示例:2022-08-05 12:59:59.559</li>
|
* <li>yyyy-MM-dd HH:mm:ss.SSS 示例:2022-08-05 12:59:59.559</li>
|
||||||
* <li>yyyy-MM-dd HH:mm:ss.SSSZ 示例:2022-08-05 12:59:59.559+0800【东八区中国时区】、2022-08-05 04:59:59.559+0000【冰岛0时区】, 年月日 时分秒 毫秒 时区</li>
|
* <li>yyyy-MM-dd HH:mm:ss.SSSZ 示例:2022-08-05 12:59:59.559+0800【东八区中国时区】、2022-08-05 04:59:59.559+0000【冰岛0时区】, 年月日 时分秒 毫秒 时区</li>
|
||||||
* <li>yyyy-MM-dd HH:mm:ss.SSSz 示例:2022-08-05 12:59:59.559UTC【世界标准时间=0时区】、2022-08-05T12:59:59.599GMT【冰岛0时区】、2022-08-05T12:59:59.599CST【东八区中国时区】、2022-08-23T03:45:00.599EDT【美国东北纽约时间,-0400】 ,年月日 时分秒 毫秒 时区</li>
|
* <li>yyyy-MM-dd HH:mm:ss.SSSz 示例:2022-08-05 12:59:59.559UTC【世界标准时间=0时区】、2022-08-05T12:59:59.599GMT【冰岛0时区】、2022-08-05T12:59:59.599CST【东八区中国时区】、2022-08-23T03:45:00.599EDT【美国东北纽约时间,-0400】 ,年月日 时分秒 毫秒 时区</li>
|
||||||
* <li>yyyy-MM-dd'T'HH:mm:ss.SSS'Z' 示例:2022-08-05T12:59:59.559Z, 其中:''单引号表示转义字符,T:分隔符,Z:一般值UTC,0时区的时间含义</li>
|
* <li>yyyy-MM-dd'T'HH:mm:ss.SSS'Z' 示例:2022-08-05T12:59:59.559Z, 其中:''单引号表示转义字符,T:分隔符,Z:一般指UTC,0时区的时间含义</li>
|
||||||
* <li>yyyy-MM-dd'T'HH:mm:ss.SSSZ 示例:2022-08-05T11:59:59.559+0800, 其中:Z,表示时区</li>
|
* <li>yyyy-MM-dd'T'HH:mm:ss.SSSZ 示例:2022-08-05T11:59:59.559+0800, 其中:Z,表示时区</li>
|
||||||
* <li>yyyy-MM-dd'T'HH:mm:ss.SSSX 示例:2022-08-05T12:59:59.559+08, 其中:X:两位时区,+08表示:东8区,中国时区</li>
|
* <li>yyyy-MM-dd'T'HH:mm:ss.SSSX 示例:2022-08-05T12:59:59.559+08, 其中:X:两位时区,+08表示:东8区,中国时区</li>
|
||||||
* <li>yyyy-MM-dd'T'HH:mm:ss.SSSXX 示例:2022-08-05T12:59:59.559+0800, 其中:XX:四位时区</li>
|
* <li>yyyy-MM-dd'T'HH:mm:ss.SSSXX 示例:2022-08-05T12:59:59.559+0800, 其中:XX:四位时区</li>
|
||||||
@ -61,7 +61,7 @@ import java.util.regex.Pattern;
|
|||||||
* 如:“09:30 UTC”表示为“09:30Z”或“T0930Z”,其中:Z 是 +00:00 的缩写,意思是 UTC(零时分秒的偏移量).
|
* 如:“09:30 UTC”表示为“09:30Z”或“T0930Z”,其中:Z 是 +00:00 的缩写,意思是 UTC(零时分秒的偏移量).
|
||||||
* </p>
|
* </p>
|
||||||
* <ul>
|
* <ul>
|
||||||
* <li>yyyy-MM-dd'T'HH:mm:ssZ</li>
|
* <li>yyyy-MM-dd'T'HH:mm:ss'Z'</li>
|
||||||
* <li>2022-08-23T15:20:46UTC</li>
|
* <li>2022-08-23T15:20:46UTC</li>
|
||||||
* <li>2022-08-23T15:20:46 UTC</li>
|
* <li>2022-08-23T15:20:46 UTC</li>
|
||||||
* <li>2022-08-23T15:20:46+0000</li>
|
* <li>2022-08-23T15:20:46+0000</li>
|
||||||
@ -189,15 +189,15 @@ public class DatePattern {
|
|||||||
/**
|
/**
|
||||||
* ISO8601日期时间格式,精确到毫秒:yyyy-MM-dd HH:mm:ss,SSS
|
* ISO8601日期时间格式,精确到毫秒:yyyy-MM-dd HH:mm:ss,SSS
|
||||||
*/
|
*/
|
||||||
public static final String ISO8601_PATTERN = "yyyy-MM-dd HH:mm:ss,SSS";
|
public static final String NORM_DATETIME_COMMA_MS_PATTERN = "yyyy-MM-dd HH:mm:ss,SSS";
|
||||||
/**
|
/**
|
||||||
* ISO8601日期时间格式,精确到毫秒 {@link FastDateFormat}:yyyy-MM-dd HH:mm:ss,SSS
|
* ISO8601日期时间格式,精确到毫秒 {@link FastDateFormat}:yyyy-MM-dd HH:mm:ss,SSS
|
||||||
*/
|
*/
|
||||||
public static final FastDateFormat ISO8601_FORMAT = FastDateFormat.getInstance(ISO8601_PATTERN);
|
public static final FastDateFormat NORM_DATETIME_COMMA_MS_FORMAT = FastDateFormat.getInstance(NORM_DATETIME_COMMA_MS_PATTERN);
|
||||||
/**
|
/**
|
||||||
* 标准日期格式 {@link DateTimeFormatter}:yyyy-MM-dd HH:mm:ss,SSS
|
* 标准日期格式 {@link DateTimeFormatter}:yyyy-MM-dd HH:mm:ss,SSS
|
||||||
*/
|
*/
|
||||||
public static final DateTimeFormatter ISO8601_FORMATTER = createFormatter(ISO8601_PATTERN);
|
public static final DateTimeFormatter NORM_DATETIME_COMMA_MS_FORMATTER = createFormatter(NORM_DATETIME_COMMA_MS_PATTERN);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 标准日期格式:yyyy年MM月dd日
|
* 标准日期格式:yyyy年MM月dd日
|
||||||
@ -286,8 +286,7 @@ public class DatePattern {
|
|||||||
.toFormatter();
|
.toFormatter();
|
||||||
// endregion
|
// endregion
|
||||||
|
|
||||||
// region Others
|
// region ----- Others
|
||||||
//================================================== Others ==================================================
|
|
||||||
/**
|
/**
|
||||||
* HTTP头中日期时间格式:EEE, dd MMM yyyy HH:mm:ss z
|
* HTTP头中日期时间格式:EEE, dd MMM yyyy HH:mm:ss z
|
||||||
*/
|
*/
|
||||||
@ -307,76 +306,78 @@ public class DatePattern {
|
|||||||
public static final FastDateFormat JDK_DATETIME_FORMAT = FastDateFormat.getInstance(JDK_DATETIME_PATTERN, Locale.US);
|
public static final FastDateFormat JDK_DATETIME_FORMAT = FastDateFormat.getInstance(JDK_DATETIME_PATTERN, Locale.US);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* UTC时间:yyyy-MM-dd'T'HH:mm:ss
|
* ISO8601日期时间:yyyy-MM-dd'T'HH:mm:ss<br>
|
||||||
|
* 按照ISO8601规范,默认使用T分隔日期和时间,末尾不加Z表示当地时区
|
||||||
*/
|
*/
|
||||||
public static final String UTC_SIMPLE_PATTERN = "yyyy-MM-dd'T'HH:mm:ss";
|
public static final String ISO8601_PATTERN = "yyyy-MM-dd'T'HH:mm:ss";
|
||||||
/**
|
/**
|
||||||
* UTC时间{@link FastDateFormat}:yyyy-MM-dd'T'HH:mm:ss
|
* ISO8601日期时间{@link FastDateFormat}:yyyy-MM-dd'T'HH:mm:ss
|
||||||
*/
|
*/
|
||||||
public static final FastDateFormat UTC_SIMPLE_FORMAT = FastDateFormat.getInstance(UTC_SIMPLE_PATTERN, TimeZone.getTimeZone("UTC"));
|
public static final FastDateFormat ISO8601_FORMAT = FastDateFormat.getInstance(ISO8601_PATTERN);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* UTC时间:yyyy-MM-dd'T'HH:mm:ss.SSS
|
* UTC时间:yyyy-MM-dd'T'HH:mm:ss.SSS
|
||||||
*/
|
*/
|
||||||
public static final String UTC_SIMPLE_MS_PATTERN = "yyyy-MM-dd'T'HH:mm:ss.SSS";
|
public static final String ISO8601_MS_PATTERN = "yyyy-MM-dd'T'HH:mm:ss.SSS";
|
||||||
/**
|
/**
|
||||||
* UTC时间{@link FastDateFormat}:yyyy-MM-dd'T'HH:mm:ss.SSS
|
* UTC时间{@link FastDateFormat}:yyyy-MM-dd'T'HH:mm:ss.SSS
|
||||||
*/
|
*/
|
||||||
public static final FastDateFormat UTC_SIMPLE_MS_FORMAT = FastDateFormat.getInstance(UTC_SIMPLE_MS_PATTERN, TimeZone.getTimeZone("UTC"));
|
public static final FastDateFormat ISO8601_MS_FORMAT = FastDateFormat.getInstance(ISO8601_MS_PATTERN);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* UTC时间:yyyy-MM-dd'T'HH:mm:ss'Z'
|
* UTC时间:yyyy-MM-dd'T'HH:mm:ss'Z'<br>
|
||||||
|
* 按照ISO8601规范,后缀加Z表示UTC时间
|
||||||
*/
|
*/
|
||||||
public static final String UTC_PATTERN = "yyyy-MM-dd'T'HH:mm:ss'Z'";
|
public static final String UTC_PATTERN = "yyyy-MM-dd'T'HH:mm:ss'Z'";
|
||||||
/**
|
/**
|
||||||
* UTC时间{@link FastDateFormat}:yyyy-MM-dd'T'HH:mm:ss'Z'
|
* ISO8601时间{@link FastDateFormat}:yyyy-MM-dd'T'HH:mm:ss'Z'
|
||||||
*/
|
*/
|
||||||
public static final FastDateFormat UTC_FORMAT = FastDateFormat.getInstance(UTC_PATTERN, TimeZone.getTimeZone("UTC"));
|
public static final FastDateFormat UTC_FORMAT = FastDateFormat.getInstance(UTC_PATTERN, ZoneUtil.ZONE_UTC);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* UTC时间:yyyy-MM-dd'T'HH:mm:ssZ
|
* ISO8601时间:yyyy-MM-dd'T'HH:mm:ssZ,Z表示一个时间偏移,如+0800
|
||||||
*/
|
*/
|
||||||
public static final String UTC_WITH_ZONE_OFFSET_PATTERN = "yyyy-MM-dd'T'HH:mm:ssZ";
|
public static final String ISO8601_WITH_ZONE_OFFSET_PATTERN = "yyyy-MM-dd'T'HH:mm:ssZ";
|
||||||
/**
|
/**
|
||||||
* UTC时间{@link FastDateFormat}:yyyy-MM-dd'T'HH:mm:ssZ
|
* ISO8601时间{@link FastDateFormat}:yyyy-MM-dd'T'HH:mm:ssZ,Z表示一个时间偏移,如+0800
|
||||||
*/
|
*/
|
||||||
public static final FastDateFormat UTC_WITH_ZONE_OFFSET_FORMAT = FastDateFormat.getInstance(UTC_WITH_ZONE_OFFSET_PATTERN, TimeZone.getTimeZone("UTC"));
|
public static final FastDateFormat ISO8601_WITH_ZONE_OFFSET_FORMAT = FastDateFormat.getInstance(ISO8601_WITH_ZONE_OFFSET_PATTERN);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* UTC时间:yyyy-MM-dd'T'HH:mm:ssXXX
|
* ISO8601时间:yyyy-MM-dd'T'HH:mm:ssXXX
|
||||||
*/
|
*/
|
||||||
public static final String UTC_WITH_XXX_OFFSET_PATTERN = "yyyy-MM-dd'T'HH:mm:ssXXX";
|
public static final String ISO8601_WITH_XXX_OFFSET_PATTERN = "yyyy-MM-dd'T'HH:mm:ssXXX";
|
||||||
/**
|
/**
|
||||||
* UTC时间{@link FastDateFormat}:yyyy-MM-dd'T'HH:mm:ssXXX
|
* ISO8601时间{@link FastDateFormat}:yyyy-MM-dd'T'HH:mm:ssXXX
|
||||||
*/
|
*/
|
||||||
public static final FastDateFormat UTC_WITH_XXX_OFFSET_FORMAT = FastDateFormat.getInstance(UTC_WITH_XXX_OFFSET_PATTERN);
|
public static final FastDateFormat ISO8601_WITH_XXX_OFFSET_FORMAT = FastDateFormat.getInstance(ISO8601_WITH_XXX_OFFSET_PATTERN);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* UTC时间:yyyy-MM-dd'T'HH:mm:ss.SSS'Z'
|
* ISO8601时间:yyyy-MM-dd'T'HH:mm:ss.SSS'Z'
|
||||||
*/
|
*/
|
||||||
public static final String UTC_MS_PATTERN = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'";
|
public static final String UTC_MS_PATTERN = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'";
|
||||||
/**
|
/**
|
||||||
* UTC时间{@link FastDateFormat}:yyyy-MM-dd'T'HH:mm:ss.SSS'Z'
|
* ISO8601时间{@link FastDateFormat}:yyyy-MM-dd'T'HH:mm:ss.SSS'Z'
|
||||||
*/
|
*/
|
||||||
public static final FastDateFormat UTC_MS_FORMAT = FastDateFormat.getInstance(UTC_MS_PATTERN, TimeZone.getTimeZone("UTC"));
|
public static final FastDateFormat UTC_MS_FORMAT = FastDateFormat.getInstance(UTC_MS_PATTERN, ZoneUtil.ZONE_UTC);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* UTC时间:yyyy-MM-dd'T'HH:mm:ss.SSSZ
|
* ISO8601时间:yyyy-MM-dd'T'HH:mm:ss.SSSZ
|
||||||
*/
|
*/
|
||||||
public static final String UTC_MS_WITH_ZONE_OFFSET_PATTERN = "yyyy-MM-dd'T'HH:mm:ss.SSSZ";
|
public static final String ISO8601_MS_WITH_ZONE_OFFSET_PATTERN = "yyyy-MM-dd'T'HH:mm:ss.SSSZ";
|
||||||
/**
|
/**
|
||||||
* UTC时间{@link FastDateFormat}:yyyy-MM-dd'T'HH:mm:ss.SSSZ
|
* ISO8601时间{@link FastDateFormat}:yyyy-MM-dd'T'HH:mm:ss.SSSZ
|
||||||
*/
|
*/
|
||||||
public static final FastDateFormat UTC_MS_WITH_ZONE_OFFSET_FORMAT = FastDateFormat.getInstance(UTC_MS_WITH_ZONE_OFFSET_PATTERN, TimeZone.getTimeZone("UTC"));
|
public static final FastDateFormat ISO8601_MS_WITH_ZONE_OFFSET_FORMAT = FastDateFormat.getInstance(ISO8601_MS_WITH_ZONE_OFFSET_PATTERN);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* UTC时间:yyyy-MM-dd'T'HH:mm:ss.SSSXXX
|
* ISO8601时间:yyyy-MM-dd'T'HH:mm:ss.SSSXXX
|
||||||
*/
|
*/
|
||||||
public static final String UTC_MS_WITH_XXX_OFFSET_PATTERN = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX";
|
public static final String ISO8601_MS_WITH_XXX_OFFSET_PATTERN = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX";
|
||||||
/**
|
/**
|
||||||
* UTC时间{@link FastDateFormat}:yyyy-MM-dd'T'HH:mm:ss.SSSXXX
|
* UTC时间{@link FastDateFormat}:yyyy-MM-dd'T'HH:mm:ss.SSSXXX
|
||||||
*/
|
*/
|
||||||
public static final FastDateFormat UTC_MS_WITH_XXX_OFFSET_FORMAT = FastDateFormat.getInstance(UTC_MS_WITH_XXX_OFFSET_PATTERN);
|
public static final FastDateFormat ISO8601_MS_WITH_XXX_OFFSET_FORMAT = FastDateFormat.getInstance(ISO8601_MS_WITH_XXX_OFFSET_PATTERN);
|
||||||
// endregion
|
// endregion
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -23,11 +23,6 @@ import java.util.function.Function;
|
|||||||
* @since 6.0.0
|
* @since 6.0.0
|
||||||
*/
|
*/
|
||||||
public class TimeUtil extends TemporalAccessorUtil {
|
public class TimeUtil extends TemporalAccessorUtil {
|
||||||
/**
|
|
||||||
* UTC 的 ZoneID
|
|
||||||
*/
|
|
||||||
public static final ZoneId ZONE_ID_UTC = ZoneId.of("UTC");
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 当前时间,默认时区
|
* 当前时间,默认时区
|
||||||
*
|
*
|
||||||
@ -53,7 +48,7 @@ public class TimeUtil extends TemporalAccessorUtil {
|
|||||||
* @return {@link LocalDateTime}
|
* @return {@link LocalDateTime}
|
||||||
*/
|
*/
|
||||||
public static LocalDateTime ofUTC(final Instant instant) {
|
public static LocalDateTime ofUTC(final Instant instant) {
|
||||||
return of(instant, ZONE_ID_UTC);
|
return of(instant, ZoneUtil.ZONE_ID_UTC);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -11,6 +11,15 @@ import java.util.TimeZone;
|
|||||||
*/
|
*/
|
||||||
public class ZoneUtil {
|
public class ZoneUtil {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* UTC 的 ZoneID
|
||||||
|
*/
|
||||||
|
public static final TimeZone ZONE_UTC = TimeZone.getTimeZone("UTC");
|
||||||
|
/**
|
||||||
|
* UTC 的 TimeZone
|
||||||
|
*/
|
||||||
|
public static final ZoneId ZONE_ID_UTC = ZONE_UTC.toZoneId();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {@link ZoneId}转换为{@link TimeZone},{@code null}则返回系统默认值
|
* {@link ZoneId}转换为{@link TimeZone},{@code null}则返回系统默认值
|
||||||
*
|
*
|
||||||
|
@ -61,10 +61,10 @@ public class UTCDateParser extends DefaultDateBasic implements DateParser {
|
|||||||
if (StrUtil.contains(source, CharUtil.DOT)) {
|
if (StrUtil.contains(source, CharUtil.DOT)) {
|
||||||
// 带毫秒,格式类似:2018-09-13T05:34:31.999+08:00
|
// 带毫秒,格式类似:2018-09-13T05:34:31.999+08:00
|
||||||
source = normalizeMillSeconds(source, ".", "+");
|
source = normalizeMillSeconds(source, ".", "+");
|
||||||
return new DateTime(source, DatePattern.UTC_MS_WITH_XXX_OFFSET_FORMAT);
|
return new DateTime(source, DatePattern.ISO8601_MS_WITH_XXX_OFFSET_FORMAT);
|
||||||
} else {
|
} else {
|
||||||
// 格式类似:2018-09-13T05:34:31+08:00
|
// 格式类似:2018-09-13T05:34:31+08:00
|
||||||
return new DateTime(source, DatePattern.UTC_WITH_XXX_OFFSET_FORMAT);
|
return new DateTime(source, DatePattern.ISO8601_WITH_XXX_OFFSET_FORMAT);
|
||||||
}
|
}
|
||||||
} else if(ReUtil.contains("-\\d{2}:?00", source)){
|
} else if(ReUtil.contains("-\\d{2}:?00", source)){
|
||||||
// Issue#2612,类似 2022-09-14T23:59:00-08:00 或者 2022-09-14T23:59:00-0800
|
// Issue#2612,类似 2022-09-14T23:59:00-08:00 或者 2022-09-14T23:59:00-0800
|
||||||
@ -78,22 +78,22 @@ public class UTCDateParser extends DefaultDateBasic implements DateParser {
|
|||||||
if (StrUtil.contains(source, CharUtil.DOT)) {
|
if (StrUtil.contains(source, CharUtil.DOT)) {
|
||||||
// 带毫秒,格式类似:2018-09-13T05:34:31.999-08:00
|
// 带毫秒,格式类似:2018-09-13T05:34:31.999-08:00
|
||||||
source = normalizeMillSeconds(source, ".", "-");
|
source = normalizeMillSeconds(source, ".", "-");
|
||||||
return new DateTime(source, DatePattern.UTC_MS_WITH_XXX_OFFSET_FORMAT);
|
return new DateTime(source, DatePattern.ISO8601_MS_WITH_XXX_OFFSET_FORMAT);
|
||||||
} else {
|
} else {
|
||||||
// 格式类似:2018-09-13T05:34:31-08:00
|
// 格式类似:2018-09-13T05:34:31-08:00
|
||||||
return new DateTime(source, DatePattern.UTC_WITH_XXX_OFFSET_FORMAT);
|
return new DateTime(source, DatePattern.ISO8601_WITH_XXX_OFFSET_FORMAT);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (length == DatePattern.UTC_SIMPLE_PATTERN.length() - 2) {
|
if (length == DatePattern.ISO8601_PATTERN.length() - 2) {
|
||||||
// 格式类似:2018-09-13T05:34:31
|
// 格式类似:2018-09-13T05:34:31
|
||||||
return new DateTime(source, DatePattern.UTC_SIMPLE_FORMAT);
|
return new DateTime(source, DatePattern.ISO8601_FORMAT);
|
||||||
} else if (length == DatePattern.UTC_SIMPLE_PATTERN.length() - 5) {
|
} else if (length == DatePattern.ISO8601_PATTERN.length() - 5) {
|
||||||
// 格式类似:2018-09-13T05:34
|
// 格式类似:2018-09-13T05:34
|
||||||
return new DateTime(source + ":00", DatePattern.UTC_SIMPLE_FORMAT);
|
return new DateTime(source + ":00", DatePattern.ISO8601_FORMAT);
|
||||||
} else if (StrUtil.contains(source, CharUtil.DOT)) {
|
} else if (StrUtil.contains(source, CharUtil.DOT)) {
|
||||||
// 可能为: 2021-03-17T06:31:33.99
|
// 可能为: 2021-03-17T06:31:33.99
|
||||||
source = normalizeMillSeconds(source, ".", null);
|
source = normalizeMillSeconds(source, ".", null);
|
||||||
return new DateTime(source, DatePattern.UTC_SIMPLE_MS_FORMAT);
|
return new DateTime(source, DatePattern.ISO8601_MS_FORMAT);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// 没有更多匹配的时间格式
|
// 没有更多匹配的时间格式
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package cn.hutool.core.text.split;
|
package cn.hutool.core.text.split;
|
||||||
|
|
||||||
|
import cn.hutool.core.collection.ListUtil;
|
||||||
import cn.hutool.core.regex.PatternPool;
|
import cn.hutool.core.regex.PatternPool;
|
||||||
import cn.hutool.core.text.StrUtil;
|
import cn.hutool.core.text.StrUtil;
|
||||||
import cn.hutool.core.text.finder.CharFinder;
|
import cn.hutool.core.text.finder.CharFinder;
|
||||||
@ -302,7 +303,8 @@ public class SplitUtil {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 切分字符串<br>
|
* 切分字符串<br>
|
||||||
* 如果为空字符串或者null 则返回空集合
|
* 如果提供的字符串为{@code null},则返回一个空的{@link ArrayList}<br>
|
||||||
|
* 如果提供的字符串为"",则当ignoreEmpty时返回空的{@link ArrayList},否则返回只有一个""元素的{@link ArrayList}
|
||||||
*
|
*
|
||||||
* @param text 被切分的字符串
|
* @param text 被切分的字符串
|
||||||
* @param separator 分隔符字符串
|
* @param separator 分隔符字符串
|
||||||
@ -314,8 +316,10 @@ public class SplitUtil {
|
|||||||
* @since 3.2.1
|
* @since 3.2.1
|
||||||
*/
|
*/
|
||||||
public static List<String> split(final CharSequence text, final String separator, final int limit, final boolean isTrim, final boolean ignoreEmpty, final boolean ignoreCase) {
|
public static List<String> split(final CharSequence text, final String separator, final int limit, final boolean isTrim, final boolean ignoreEmpty, final boolean ignoreCase) {
|
||||||
if (StrUtil.isEmpty(text)) {
|
if(null == text){
|
||||||
return new ArrayList<>(0);
|
return new ArrayList<>(0);
|
||||||
|
} else if (0 == text.length()) {
|
||||||
|
return ignoreEmpty ? new ArrayList<>(0) : ListUtil.of(StrUtil.EMPTY);
|
||||||
}
|
}
|
||||||
final SplitIter splitIter = new SplitIter(text, new StrFinder(separator, ignoreCase), limit, ignoreEmpty);
|
final SplitIter splitIter = new SplitIter(text, new StrFinder(separator, ignoreCase), limit, ignoreEmpty);
|
||||||
return splitIter.toList(isTrim);
|
return splitIter.toList(isTrim);
|
||||||
|
@ -109,10 +109,10 @@ public class DateTimeTest {
|
|||||||
public void toStringTest2() {
|
public void toStringTest2() {
|
||||||
final DateTime dateTime = new DateTime("2017-01-05 12:34:23", DatePattern.NORM_DATETIME_FORMAT);
|
final DateTime dateTime = new DateTime("2017-01-05 12:34:23", DatePattern.NORM_DATETIME_FORMAT);
|
||||||
|
|
||||||
String dateStr = dateTime.toString(DatePattern.UTC_WITH_ZONE_OFFSET_PATTERN);
|
String dateStr = dateTime.toString(DatePattern.ISO8601_WITH_ZONE_OFFSET_PATTERN);
|
||||||
Assert.assertEquals("2017-01-05T12:34:23+0800", dateStr);
|
Assert.assertEquals("2017-01-05T12:34:23+0800", dateStr);
|
||||||
|
|
||||||
dateStr = dateTime.toString(DatePattern.UTC_WITH_XXX_OFFSET_PATTERN);
|
dateStr = dateTime.toString(DatePattern.ISO8601_WITH_XXX_OFFSET_PATTERN);
|
||||||
Assert.assertEquals("2017-01-05T12:34:23+08:00", dateStr);
|
Assert.assertEquals("2017-01-05T12:34:23+08:00", dateStr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
package cn.hutool.core.date;
|
package cn.hutool.core.date;
|
||||||
|
|
||||||
import cn.hutool.core.collection.ListUtil;
|
|
||||||
import cn.hutool.core.date.BetweenFormatter.Level;
|
import cn.hutool.core.date.BetweenFormatter.Level;
|
||||||
import cn.hutool.core.date.format.FastDateFormat;
|
import cn.hutool.core.date.format.FastDateFormat;
|
||||||
import cn.hutool.core.lang.Console;
|
import cn.hutool.core.lang.Console;
|
||||||
@ -14,15 +13,7 @@ import java.time.LocalDate;
|
|||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.time.LocalTime;
|
import java.time.LocalTime;
|
||||||
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeFormatter;
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.Calendar;
|
|
||||||
import java.util.Date;
|
|
||||||
import java.util.GregorianCalendar;
|
|
||||||
import java.util.LinkedHashSet;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Locale;
|
|
||||||
import java.util.Objects;
|
|
||||||
import java.util.TimeZone;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 时间工具单元测试<br>
|
* 时间工具单元测试<br>
|
||||||
@ -796,23 +787,6 @@ public class DateUtilTest {
|
|||||||
Assert.assertEquals(0, DateUtil.compare(date11, date22, DatePattern.NORM_MONTH_PATTERN));
|
Assert.assertEquals(0, DateUtil.compare(date11, date22, DatePattern.NORM_MONTH_PATTERN));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
|
||||||
public void yearAndQTest() {
|
|
||||||
final String yearAndQuarter = DateUtil.yearAndQuarter(DateUtil.parse("2018-12-01"));
|
|
||||||
Assert.assertEquals("20184", yearAndQuarter);
|
|
||||||
|
|
||||||
final LinkedHashSet<String> yearAndQuarters = DateUtil.yearAndQuarter(DateUtil.parse("2018-09-10"), DateUtil.parse("2018-12-20"));
|
|
||||||
final List<String> list = ListUtil.of(false, yearAndQuarters);
|
|
||||||
Assert.assertEquals(2, list.size());
|
|
||||||
Assert.assertEquals("20183", list.get(0));
|
|
||||||
Assert.assertEquals("20184", list.get(1));
|
|
||||||
|
|
||||||
final LinkedHashSet<String> yearAndQuarters2 = DateUtil.yearAndQuarter(DateUtil.parse("2018-10-10"), DateUtil.parse("2018-12-10"));
|
|
||||||
final List<String> list2 = ListUtil.of(false, yearAndQuarters2);
|
|
||||||
Assert.assertEquals(1, list2.size());
|
|
||||||
Assert.assertEquals("20184", list2.get(0));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void formatHttpDateTest() {
|
public void formatHttpDateTest() {
|
||||||
final String formatHttpDate = DateUtil.formatHttpDate(DateUtil.parse("2019-01-02 22:32:01"));
|
final String formatHttpDate = DateUtil.formatHttpDate(DateUtil.parse("2019-01-02 22:32:01"));
|
||||||
|
22
hutool-core/src/test/java/cn/hutool/core/date/Issue2981Test.java
Executable file
22
hutool-core/src/test/java/cn/hutool/core/date/Issue2981Test.java
Executable file
@ -0,0 +1,22 @@
|
|||||||
|
package cn.hutool.core.date;
|
||||||
|
|
||||||
|
import org.junit.Assert;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
public class Issue2981Test {
|
||||||
|
/**
|
||||||
|
* https://github.com/dromara/hutool/issues/2981<br>
|
||||||
|
* 按照ISO8601规范,以Z结尾表示UTC时间,否则为当地时间
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("DataFlowIssue")
|
||||||
|
@Test
|
||||||
|
public void parseUTCTest() {
|
||||||
|
final String str1 = "2019-01-01T00:00:00.000Z";
|
||||||
|
final String str2 = "2019-01-01T00:00:00.000";
|
||||||
|
final String str3 = "2019-01-01 00:00:00.000";
|
||||||
|
|
||||||
|
Assert.assertEquals(1546300800000L, DateUtil.parse(str1).getTime());
|
||||||
|
Assert.assertEquals(1546272000000L, DateUtil.parse(str2).getTime());
|
||||||
|
Assert.assertEquals(1546272000000L, DateUtil.parse(str3).getTime());
|
||||||
|
}
|
||||||
|
}
|
@ -27,12 +27,22 @@ public class TimeUtilTest {
|
|||||||
final String dateStr = "2020-01-23T12:23:56";
|
final String dateStr = "2020-01-23T12:23:56";
|
||||||
final DateTime dt = DateUtil.parse(dateStr);
|
final DateTime dt = DateUtil.parse(dateStr);
|
||||||
|
|
||||||
LocalDateTime of = TimeUtil.of(dt);
|
final LocalDateTime of = TimeUtil.of(dt);
|
||||||
Assert.assertNotNull(of);
|
Assert.assertNotNull(of);
|
||||||
Assert.assertEquals(dateStr, of.toString());
|
Assert.assertEquals(dateStr, of.toString());
|
||||||
|
}
|
||||||
|
|
||||||
of = TimeUtil.ofUTC(dt.getTime());
|
@SuppressWarnings("DataFlowIssue")
|
||||||
Assert.assertEquals(dateStr, of.toString());
|
@Test
|
||||||
|
public void ofUTCTest() {
|
||||||
|
final String dateStr = "2020-01-23T12:23:56Z";
|
||||||
|
final DateTime dt = DateUtil.parse(dateStr);
|
||||||
|
|
||||||
|
final LocalDateTime of = TimeUtil.of(dt);
|
||||||
|
final LocalDateTime of2 = TimeUtil.ofUTC(dt.getTime());
|
||||||
|
Assert.assertNotNull(of);
|
||||||
|
Assert.assertNotNull(of2);
|
||||||
|
Assert.assertEquals(of, of2);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package cn.hutool.core.text.split;
|
package cn.hutool.core.text.split;
|
||||||
|
|
||||||
|
import cn.hutool.core.lang.Console;
|
||||||
import org.junit.Assert;
|
import org.junit.Assert;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
@ -59,16 +60,25 @@ public class StrSplitterTest {
|
|||||||
final String str = "";
|
final String str = "";
|
||||||
final String[] split = str.split(",");
|
final String[] split = str.split(",");
|
||||||
final String[] strings = SplitUtil.splitToArray(str, ",", -1, false, false);
|
final String[] strings = SplitUtil.splitToArray(str, ",", -1, false, false);
|
||||||
|
|
||||||
Assert.assertNotNull(strings);
|
Assert.assertNotNull(strings);
|
||||||
Assert.assertArrayEquals(split, strings);
|
Assert.assertArrayEquals(split, strings);
|
||||||
|
|
||||||
|
final String[] strings2 = SplitUtil.splitToArray(str, ",", -1, false, true);
|
||||||
|
Assert.assertEquals(0, strings2.length);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("ConstantValue")
|
||||||
@Test
|
@Test
|
||||||
public void splitNullTest(){
|
public void splitNullTest(){
|
||||||
final String str = null;
|
final String str = null;
|
||||||
final String[] strings = SplitUtil.splitToArray(str, ",", -1, false, false);
|
final String[] strings = SplitUtil.splitToArray(str, ",", -1, false, false);
|
||||||
Assert.assertNotNull(strings);
|
Assert.assertNotNull(strings);
|
||||||
Assert.assertEquals(0, strings.length);
|
Assert.assertEquals(0, strings.length);
|
||||||
|
|
||||||
|
final String[] strings2 = SplitUtil.splitToArray(str, ",", -1, false, true);
|
||||||
|
Assert.assertNotNull(strings2);
|
||||||
|
Assert.assertEquals(0, strings2.length);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
Reference in New Issue
Block a user