我使用java8格式化程序像'2018-04-12 15:12:32.999'
一样解析日期。当我有像this date的2018-04-12 15:12:32.999'
这样的3位毫秒时,它工作得很好,但它失败了,并抛出了一个异常java.time.format.DateTimeParseException: Text '2018-04-18 15:27:10.77' could not be parsed at index 20
,当date只有2位毫秒时,你能建议如何解析这个日期吗?
我的格式化工具使用的是"yyyy-MM-dd HH:mm:ss.SSS"
模式“。我的代码如下:
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS");
LocalDateTime.parse(dateStr,formatter);
发布于 2019-01-28 11:07:08
String dateStr = "2018-04-12 15:12:32.99";
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
.appendPattern("yyyy-MM-dd HH:mm:ss")
.appendFraction(ChronoField.MILLI_OF_SECOND, 2, 3, true)
.toFormatter();
System.out.println(LocalDateTime.parse(dateStr, formatter));
其中,2,3 -字段的最小宽度和最大宽度
输出:
2018-04-12T15:12:32.990
发布于 2018-04-19 03:04:16
有几种选择。我会选择这个:
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
.append(DateTimeFormatter.ISO_LOCAL_DATE)
.appendLiteral(' ')
.append(DateTimeFormatter.ISO_LOCAL_TIME)
.toFormatter();
String dateTimeString = "2018-04-18 15:27:10.77";
LocalDateTime dateTime = LocalDateTime.parse(dateTimeString, formatter);
System.out.println(dateTime);
输出:
2018-04-18T15:27:10.770
DateTimeFormatter.ISO_LOCAL_TIME
可以选择接受小数点和一到九位数字。我更喜欢使用构建器来组合预定义的格式化程序,而不是从头开始构建自己的格式化程序。
有些人更喜欢短一点的。就我个人而言,我觉得这有点老生常谈:
dateTimeString = dateTimeString.replace(' ', 'T');
LocalDateTime dateTime = LocalDateTime.parse(dateTimeString);
输出是相同的。我们利用了两个事实:(1)单参数LocalDateTime.parse
解析ISO8601格式。(2)您的输入字符串非常接近ISO8601格式,只是缺少表示时间部分开始位置的T
。
您不需要第三个选项,但为了完整起见,我想提一下:如果从头开始构建格式化程序并且需要可变数量的小数,请使用DateTimeFormatterBuilder
(我在第一个代码片段中使用的类)和its appendFraction
method。它使您可以控制小数的最小和最大数量。
发布于 2018-04-18 14:34:26
15:12:32:999
包含冒号:
。您的pattern HH:mm:ss.SSS
包含一个不匹配的点.
。
这是可行的。
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Playground {
public static void main(String[] args) throws ParseException {
String pattern = "yyyy-MM-dd HH:mm:ss.SSS";
String s1 = "2018-04-12 15:12:32.999";
String s2 = "2018-04-18 15:27:10.77";
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
Date d1 = sdf.parse(s1);
System.out.println(d1);
Date d2 = sdf.parse(s2);
System.out.println(d2);
}
}
输出:
Thu Apr 12 15:12:32 CEST 2018
Wed Apr 18 15:27:10 CEST 2018
https://stackoverflow.com/questions/49902174
复制相似问题