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);
/**
* 标准日期时间格式精确到毫秒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
*/

View File

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

View File

@ -460,18 +460,34 @@ public class DateUtilTest {
* 测试支持yyyy-MM-dd HH:mm:ss.SSSSSS 格式
*/
@Test
public void parseTest9() {
public void parseNormFullTest() {
String str = "2020-02-06 01:58:00.000020";
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, 而不是直接报错
*/
@Test
public void parseTest10() {
String str = "";
public void parseEmptyTest() {
String str = " ";
DateTime dateTime = DateUtil.parse(str);
Assert.assertNull(dateTime);
}