add format support

This commit is contained in:
Looly 2021-08-19 18:27:42 +08:00
parent a986fcbe3d
commit 7c6d7526b6
3 changed files with 28 additions and 24 deletions

View File

@ -121,19 +121,6 @@ public class DatePattern {
*/ */
public static final DateTimeFormatter NORM_DATETIME_MS_FORMATTER = createFormatter(NORM_DATETIME_MS_PATTERN); public static final DateTimeFormatter NORM_DATETIME_MS_FORMATTER = createFormatter(NORM_DATETIME_MS_PATTERN);
/**
* 标准日期时间格式精确到毫秒yyyy-MM-dd HH:mm:ss.SSSSSS
*/
public static final String NORM_DATETIME_MS_FULL_PATTERN = "yyyy-MM-dd HH:mm:ss.SSSSSS";
/**
* 标准日期时间格式精确到毫秒 {@link FastDateFormat}yyyy-MM-dd HH:mm:ss.SSSSSS
*/
public static final FastDateFormat NORM_DATETIME_MS_FULL_FORMAT = FastDateFormat.getInstance(NORM_DATETIME_MS_PATTERN);
/**
* 标准日期时间格式精确到毫秒 {@link FastDateFormat}yyyy-MM-dd HH:mm:ss.SSSSSS
*/
public static final DateTimeFormatter NORM_DATETIME_MS_FULL_FORMATTER = createFormatter(NORM_DATETIME_MS_PATTERN);
/** /**
* ISO8601日期时间格式精确到毫秒yyyy-MM-dd HH:mm:ss,SSS * ISO8601日期时间格式精确到毫秒yyyy-MM-dd HH:mm:ss,SSS
*/ */

View File

@ -960,14 +960,15 @@ public class DateUtil extends CalendarUtil {
// yyyy-MM-dd HH:mm // yyyy-MM-dd HH:mm
return parse(dateStr, DatePattern.NORM_DATETIME_MINUTE_FORMAT); return parse(dateStr, DatePattern.NORM_DATETIME_MINUTE_FORMAT);
case 2: case 2:
if (StrUtil.contains(dateStr, CharUtil.DOT)) { final int indexOfDot = StrUtil.indexOf(dateStr, CharUtil.DOT);
if (dateStr.length() == DatePattern.NORM_DATETIME_MS_PATTERN.length()) { if (indexOfDot > 0) {
// yyyy-MM-dd HH:mm:ss.SSS final int length1 = dateStr.length();
return parse(dateStr, DatePattern.NORM_DATETIME_MS_FORMAT); // yyyy-MM-dd HH:mm:ss.SSS 或者 yyyy-MM-dd HH:mm:ss.SSSSSS
} else { if(length1 - indexOfDot > 4) {
// yyyy-MM-dd HH:mm:ss.SSSSSS // 类似yyyy-MM-dd HH:mm:ss.SSSSSS采取截断操作
return parse(dateStr, DatePattern.NORM_DATETIME_MS_FULL_FORMAT); dateStr = StrUtil.subPre(dateStr, indexOfDot + 4);
} }
return parse(dateStr, DatePattern.NORM_DATETIME_MS_FORMAT);
} }
// yyyy-MM-dd HH:mm:ss // yyyy-MM-dd HH:mm:ss
return parse(dateStr, DatePattern.NORM_DATETIME_FORMAT); return parse(dateStr, DatePattern.NORM_DATETIME_FORMAT);

View File

@ -460,18 +460,34 @@ public class DateUtilTest {
* 测试支持yyyy-MM-dd HH:mm:ss.SSSSSS 格式 * 测试支持yyyy-MM-dd HH:mm:ss.SSSSSS 格式
*/ */
@Test @Test
public void parseTest9() { public void parseNormFullTest() {
String str = "2020-02-06 01:58:00.000020"; String str = "2020-02-06 01:58:00.000020";
DateTime dateTime = DateUtil.parse(str); DateTime dateTime = DateUtil.parse(str);
assert dateTime != null; Assert.assertNotNull(dateTime);
Assert.assertEquals("2020-02-06 01:58:00.000", dateTime.toString(DatePattern.NORM_DATETIME_MS_PATTERN));
str = "2020-02-06 01:58:00.00002";
dateTime = DateUtil.parse(str);
Assert.assertNotNull(dateTime);
Assert.assertEquals("2020-02-06 01:58:00.000", dateTime.toString(DatePattern.NORM_DATETIME_MS_PATTERN));
str = "2020-02-06 01:58:00.111000";
dateTime = DateUtil.parse(str);
Assert.assertNotNull(dateTime);
Assert.assertEquals("2020-02-06 01:58:00.111", dateTime.toString(DatePattern.NORM_DATETIME_MS_PATTERN));
str = "2020-02-06 01:58:00.111";
dateTime = DateUtil.parse(str);
Assert.assertNotNull(dateTime);
Assert.assertEquals("2020-02-06 01:58:00.111", dateTime.toString(DatePattern.NORM_DATETIME_MS_PATTERN));
} }
/** /**
* 测试字符串是空返回null, 而不是直接报错 * 测试字符串是空返回null, 而不是直接报错
*/ */
@Test @Test
public void parseTest10() { public void parseEmptyTest() {
String str = ""; String str = " ";
DateTime dateTime = DateUtil.parse(str); DateTime dateTime = DateUtil.parse(str);
Assert.assertNull(dateTime); Assert.assertNull(dateTime);
} }