【发布时间】:2021-02-03 17:43:33
【问题描述】:
将小时和分钟相加会得出错误的答案。
这里有 2 个带小时的列表。
[[0 小时:0 分钟:0 秒,1 小时:16 分钟:22 秒,0 小时:1 分钟:53 秒,23 小时:54 分钟:18 秒],[0 小时:8 分钟:22秒,0 小时:8 分钟:22 秒,0 小时:8 分钟:22 秒]]这是 HOURS
然后,我将其划分为子列表,分别计算。这是子列表之一。
[0 小时 0 分钟 0 秒 1 小时 16 分钟 22 秒 0 小时 1 分钟 53 秒 23 小时 54 分钟 18 秒]
所以,我得到的这个子列表的答案是:1 小时:12 分钟:33 秒,这是不正确的。我想大约需要 25 小时加上几分钟。
public List<String> getTheHoursWorked() {
DateTimeFormatter parser = DateTimeFormatter.ofPattern("H 'hours :' m 'mins :' s 'sec'", Locale.US);
final DateFormat dt = new SimpleDateFormat("HH:mm:ss");
final Calendar c = Calendar.getInstance(TimeZone.getDefault(), Locale.getDefault());
c.clear();
long startingMS = c.getTimeInMillis();
int counter = 0;
for (int k = 0; k < hours.size(); k++){
List<Object> shorter = new ArrayList<>();
List<Object> temp;
temp = (List<Object>) hours.get(k);
long milliseconds = 0;
for (int m = 0; m < shorter.size(); m++) {
LocalTime odt = LocalTime.parse((CharSequence) shorter.get(m), parser);
DateTimeFormatter formatter =
DateTimeFormatter.ofPattern("HH:mm:ss");
String printDate = formatter.format(odt);
try {
milliseconds = milliseconds + (dt.parse(printDate).getTime() - startingMS);
System.out.println(milliseconds + "MILISECONDS");
} catch (ParseException e) {
e.printStackTrace();
}
}
hoursToString.add(String.valueOf(shorter));
String s = milliseconds / 1000 % 60 + " seconds";
String m = milliseconds /(60 * 1000) % 60 + " minutes";
String h = milliseconds / (60 * 60 * 1000) % 24 + " hours";
String together = h+":"+m+":"+s;
togetherHours.add(together);
}
return togetherHours;
}
【问题讨论】:
-
欢迎来到 Stack Overflow。请通过tour 了解 Stack Overflow 的工作原理,并阅读How to Ask 以了解如何提高问题的质量。然后edit你的问题包含你的源代码作为minimal reproducible example,它可以被其他人编译和测试。还可以查看help center,看看你可以问什么问题。请参阅:Why is “Can someone help me?” not an actual question?。请看:What Do You Mean “It Doesn't Work”?
-
您的代码毫无意义。我看不出它是怎么做的。您的内部循环迭代
shorter.size()次,但您将shorter初始化为一个空列表,然后从不向其中添加任何内容,因此您的整个内部循环将永远不会运行。你的外部循环是关于迭代一个叫做hours的东西,你没有提供它的定义。但这并不重要,因为您只将值分配给temp,然后您永远不会使用temp。milliseconds似乎总是为零。所以你的代码真的应该什么都不做。 -
时间处理可能会变得出乎意料的棘手,即使它一开始很简单,所以我建议尽可能使用标准(经过测试和调试)库。不幸的是,Java 时间处理一开始就很糟糕,所以这并不总是最容易做的事情,但仍然可能是最安全的努力学习。在这种情况下,使用 Duration 将解析的时间相加,然后使用标准方法(toHours() 和 toMinutesPart())提取小时和分钟。
标签: java time java-time localtime datetimeformatter