public static long convertDateTimeToEpochMillis(String eventDate,String eventTime) {
String patternMills = "yyyy-MM-dd HH:mm:ss.SSS";
DateTimeFormatter dtf = DateTimeFormatter.ofPattern(pattern);
LocalDateTime localDateTime = LocalDateTime.parse(eventDate + " " +
eventTime, dtf);
}
当我传递2018-07-19 23:11:52.3
但成功解析2018-07-19 23:11:52.312
时,这给出了解析异常。我不想为不同的时间指定3种不同的模式,例如yyyy-MM-dd HH:mm:ss.S
,yyyy-MM-dd HH:mm:ss.SS
和yyyy-MM-dd HH:mm:ss.SSS
。
我可以提供一个模式,该模式最多花费1/10秒,100秒和毫秒吗?
答案 0 :(得分:3)
实际上,使用标准LocalDateTime.parse
格式,您的模式离ISO 8601默认模式不远。
那么,也许不放空格而是使用字母T
对您来说足够了?
那么您根本不需要DateTimeFormatter
。
LocalDateTime localDateTime = LocalDateTime.parse(eventDate + "T" +
eventTime);
它接受以毫秒为单位的任意数字,从0到9。
答案 1 :(得分:2)
您可以选择默认三个SSS的图案
String patternMills = "yyyy-MM-dd HH:mm:ss.SSS";
并在必要时用零填充日期右侧
String eventDate = "2018-07-19 23:11:52.3";
String millis = eventDate.substring(eventDate.lastIndexOf('.')+1);
if(millis.length() < 3)
eventDate += Stream.generate(() -> "0").limit(3 - millis.length()).collect(Collectors.joining(""));
或使用漂亮的apache方法:
StringUtils.rightPad(eventDate, 23, '0'); // 23 is string length for "yyyy-MM-dd HH:mm:ss.SSS" pattern
无论如何,您还可以添加一些验证来检查日期字符串的其余部分