Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java8日期时间的单一模式_Java_Date_Parsing_Time_Java 8 - Fatal编程技术网

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);