Java8日期时间的单一模式
当我通过Java8日期时间的单一模式,java,date,parsing,time,java-8,Java,Date,Parsing,Time,Java 8,当我通过2018-07-19 23:11:52.3但成功解析2018-07-19 23:11:52.312时,这是一个解析异常。我不想为不同的时间指定3种不同的模式,比如yyyy-MM-dd HH:MM:ss.S,yyy-MM-dd HH:MM:ss.ss和yyyy-MM-dd HH:MM:ss.SSS 我可以提供一个模式,该模式将占用高达十分之一秒、百分之一秒和毫秒的时间吗?您可以选择一个默认模式,其中包含三个SSS public static long convertDateTimeToEp
2018-07-19 23:11:52.3
但成功解析2018-07-19 23:11:52.312
时,这是一个解析异常。我不想为不同的时间指定3种不同的模式,比如yyyy-MM-dd HH:MM:ss.S
,yyy-MM-dd HH:MM:ss.ss
和yyyy-MM-dd HH:MM:ss.SSS
我可以提供一个模式,该模式将占用高达十分之一秒、百分之一秒和毫秒的时间吗?您可以选择一个默认模式,其中包含三个SSS
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);
}
并在必要时用零来完成约会的右侧
String patternMills = "yyyy-MM-dd HH:mm:ss.SSS";
无论如何,您也可以添加一些验证来检查日期字符串的其余部分
实际上,您的模式离使用标准格式的默认模式不远
所以,也许不需要空格,而是用字母T
就足够了
那你根本不需要
它以毫秒为单位接受任意数量的数字,从0到9。为什么要接受3格式?我认为您应该选择一种格式,理想情况下是
yyy-MM-dd HH:MM:ss.SSS
,并将其保存在整个应用程序中。正如我前面提到的,它会产生DateTimeParseException。查看此帖子查看重复标记问题的答案,这看起来是一个很棒的解决方案。您知道您的代码无法编译吗?当发布关于堆栈溢出的问题(不是关于编译器错误消息)时,请确保可以这样做,以便我们可以尝试您的代码,以您描述的方式查看它是否失败,并在发布之前尝试我们建议的更正。我得到了“pattern不能解析为变量”和“This method必须返回long类型的结果”。我不知道这个答案是否正确,但不是使用split
而是使用eventDate.substring(eventDate.lastIndexOf(“.”+1)
@HadiJ实际编辑了我的答案-thx;)请注意,OP必须决定2018-07-19 23:11:52.3
中的3
是指3毫秒还是300毫秒,以及相应的右键还是左键。@No,您完全不对。23:11:52.3始终为300毫秒,3毫秒将为23:11:52。003@nos-你在开玩笑吗?数学基础怎么样?“毫秒”代表什么?0.3并不意味着1/3。。。除了一个没有基本数学知识的人创建了该文件:-)✔ 事实上,我证实了LocalDateTime.parse(“2018-07-19T23:11:52.3”).toString()
是有效的,在Java10.0.1中产生2018-07-19T23:11:52.300
。
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(""));
StringUtils.rightPad(eventDate, 23, '0'); // 23 is string length for "yyyy-MM-dd HH:mm:ss.SSS" pattern
LocalDateTime localDateTime = LocalDateTime.parse(eventDate + "T" +
eventTime);