所以我编写了一个代码,用于测试输入是否采用HH:MM:SS.sss的正确时间格式,以便正确检查我运行四个不同的输入,三个应该返回false和一个应该返回True,但由于某种原因,当我输入正确的格式时,我得到一个" Java.text.ParseExcetion数据:" 02:26:13.125""它返回false。我做错了什么或错过了什么?这是我的代码
new Date(2017,4,18).valueOf()/1000 - new Date(2017,4,18).getTimezoneOffset()*60
答案 0 :(得分:1)
在您的日期模式中,需要使用大写" SSS"指定毫秒:
SimpleDateFormat dateFormat = new SimpleDateFormat("hh:mm:ss.SSS");
另外,请注意使用小写" hh"意味着小时表示为1 - 12(12小时制)。如果小时表示为0 - 23(24小时制),则需要使用大写" HH"。
答案 1 :(得分:0)
现代回答:
LocalTime.parse(trade_time);
这使用DateTimeFormatter.ISO_LOCAL_TIME
,它符合您的要求格式,但它也接受更长和更短的格式,例如02:26
和02:26:13.123456789
。也许你可以忍受它。 DateTimeFormatter.ISO_LOCAL_TIME
使用严格解析,因此如果任何字段超出范围,则会抛出DateTimeFormatException
。
如果您无法接受更长或更短的格式,请构建您自己的DateTimeFormatter
。它的模式很像SimpleDateFormat
。
DateTimeFormatter timeParseFormatter = DateTimeFormatter.ofPattern("HH:mm:ss.SSS")
.withResolverStyle(ResolverStyle.STRICT);
LocalTime.parse(trade_time, timeParseFormatter);
这将在秒数上正好需要3位小数,如果有2位或4位小数,则会抛出DateTimeParseException
。