我在我的Android应用中使用了REST服务,该服务仅给我时间,但它还会返回类似的信息
"24:38:00"
或"25:15:00"
所以,我需要这次解析,然后以24h格式输出真实结果。应该是
"00:38:00"
和"01:15:00"
我尝试过使用这种方式
LocalTime localTime = new LocalTime(timeModel.getTimeString());
但是我现在有此错误Cannot parse "24:38:00": Value 24 for hourOfDay must be in the range [0,23]
我该如何解决?我只需要时间,不需要日期
答案 0 :(得分:4)
您可以拆分时间字符串并获取小时,分钟,秒,然后使用 ./bin/console doctrine:migrations:migrate
LocalTime.of
答案 1 :(得分:1)
您应该真正修复此服务器。如果这是不可能的,则您必须使用类似的方法来解决该错误
String fixServerTime(String time) {
if (time.startsWith("24")) {
return "00" + time.substring(2)
} else {
return time
}
)
// elsewhere
LocalTime localTime = new LocalTime(fixServerTime(timeModel.getTimeString()));
答案 2 :(得分:1)
在这种情况下,您可以假设这些时间字符串不遵循任何规则,因为如果24
和25
作为“小时”部分的值存在,为什么它们不回复{ {1}}?
您可以使用它来清理:
37
呼叫private static String modifyTimeString(String s) {
//the hour might only be 1 digit, so "the first 2 chars" is not a safe approach
int colonIndex = s.indexOf(':');
String hoursString = s.substring(0, colonIndex);
Integer hours = Integer.valueOf(hoursString);
if(hours < 24) {
return s;
}
/*while(hours >= 24) {
hours -= 24;
}*/
//smarter, see ronos answer:
hours = hours % 24;
//put a leading 0 in there for single-digit-hours
hoursString = hours.toString();
if(hours<10) {
hoursString = "0" + hoursString;
}
return hoursString + s.substring(colonIndex);
}
返回modifyTimeString("25:15:00")
答案 3 :(得分:1)
您需要的是用于解析的有效格式化程序,或更准确地说,是具有宽松解析器样式的格式化程序(格式化程序也具有解析样式,因此您无需宽大处理)。
DateTimeFormatter timeFormatter = DateTimeFormatter.ISO_LOCAL_TIME
.withResolverStyle(ResolverStyle.LENIENT);
String timeString = "25:15:00";
LocalTime time = LocalTime.parse(timeString, timeFormatter);
System.out.println(time);
输出:
01:15
您不需要任何手动解析,if
语句或任何模运算。您无需处理任何特殊情况。您可以将所有内容留给标准库。对于可读性和对代码的信任都很好。