DateUtil.parse适配6位毫秒格式

This commit is contained in:
Looly 2023-06-29 17:07:34 +08:00
parent 161edefaf2
commit d494e001b6
5 changed files with 47 additions and 5 deletions

View File

@ -8,6 +8,7 @@
* 【core 】 list 为空时CollUtil.max等返回null而非异常pr#1027@Gitee
* 【poi 】 ExcelReader.getWriter逻辑变更当从非文件读取时获取sheet而非空表格。
* 【core 】 Ipv4Util 新增方法:检测指定 IP 地址是否匹配通配符pr#3171@Github
* 【core 】 DateUtil.parse适配6位毫秒格式issue#I7H34N@Gitee
### 🐞Bug修复
* 【core 】 修复MapUtil工具使用filter方法构造传入参数结果问题issue#3162@Github

View File

@ -856,7 +856,8 @@ public class DateUtil extends CalendarUtil {
final int patternLength = DatePattern.UTC_MS_PATTERN.length();
// 格式类似2018-09-13T05:34:31.999Z-4表示减去4个单引号的长度
// -4 ~ -6范围表示匹配毫秒1~3位的情况
if (length <= patternLength - 4 && length >= patternLength - 6) {
if (length <= patternLength && length >= patternLength - 6) {
// issue#I7H34N支持最多6位毫秒
return parse(utcString, DatePattern.UTC_MS_FORMAT);
}
} else if (StrUtil.contains(utcString, '+')) {

View File

@ -78,7 +78,7 @@ public class FileTypeUtil {
/**
* 根据文件流的头部信息获得文件类型<br>
* 注意此方法会读取头部一些bytes造成此流接下来读取时缺少部分bytes<br>
* 因此如果想用此流流需支持{@link InputStream#reset()}方法
* 因此如果想用此流流需支持{@link InputStream#reset()}方法
* @param in {@link InputStream}
* @param isExact 是否精确匹配如果为false使用前64个bytes匹配如果为true使用前8192bytes匹配
* @return 类型文件的扩展名未找到为{@code null}
@ -93,7 +93,7 @@ public class FileTypeUtil {
/**
* 根据文件流的头部信息获得文件类型<br>
* 注意此方法会读取头部64个bytes造成此流接下来读取时缺少部分bytes<br>
* 因此如果想用此流流需支持{@link InputStream#reset()}方法
* 因此如果想用此流流需支持{@link InputStream#reset()}方法
* @param in {@link InputStream}
* @return 类型文件的扩展名未找到为{@code null}
* @throws IORuntimeException 读取流引起的异常
@ -105,7 +105,7 @@ public class FileTypeUtil {
/**
* 根据文件流的头部信息获得文件类型
* 注意此方法会读取头部64个bytes造成此流接下来读取时缺少部分bytes<br>
* 因此如果想用此流流需支持{@link InputStream#reset()}方法
* 因此如果想用此流流需支持{@link InputStream#reset()}方法
*
* <pre>
* 1无法识别类型默认按照扩展名识别
@ -125,7 +125,7 @@ public class FileTypeUtil {
/**
* 根据文件流的头部信息获得文件类型
* 注意此方法会读取头部一些bytes造成此流接下来读取时缺少部分bytes<br>
* 因此如果想用此流流需支持{@link InputStream#reset()}方法
* 因此如果想用此流流需支持{@link InputStream#reset()}方法
*
* <pre>
* 1无法识别类型默认按照扩展名识别

View File

@ -1148,4 +1148,11 @@ public class DateUtilTest {
final Calendar c = DateUtil.calendar(date);
Assert.assertEquals(DateUtil.date(c), date);
}
@Test
public void issueI7H34NTest() {
final DateTime parse = DateUtil.parse("2019-10-22T09:56:03.000123Z");
Assert.assertNotNull(parse);
Assert.assertEquals("2019-10-22 09:56:03", parse.toString());
}
}

View File

@ -0,0 +1,33 @@
/*
* Copyright (c) 2023 looly(loolly@aliyun.com)
* Hutool is licensed under Mulan PSL v2.
* You can use this software according to the terms and conditions of the Mulan PSL v2.
* You may obtain a copy of Mulan PSL v2 at:
* http://license.coscl.org.cn/MulanPSL2
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
* See the Mulan PSL v2 for more details.
*/
package cn.hutool.json;
import cn.hutool.core.lang.Pair;
import cn.hutool.core.lang.TypeReference;
import org.junit.Test;
public class IssueI7GPGXTest {
@Test
public void toBeanTest() throws NoSuchMethodException {
Pair<String, Boolean> hutoolPair = getHutoolPair();
String a = JSONUtil.toJsonStr(hutoolPair);
System.out.println(a);
System.out.println("=====================================");
Pair<String, Boolean> pair = JSONUtil.toBean(a, new TypeReference<Pair<String, Boolean>>() {}, false);
System.out.println(JSONUtil.toJsonStr(pair));
}
public static Pair<String, Boolean> getHutoolPair() {
return new Pair<>("test1", true);
}
}