如何在Java中存储花费的时间或总持续时间?

我正在使用POI API for Java自动化excel报告.我将处理的报告很少,我使用POI阅读,处理它们,并创建一个新的Excel报告.

excel文件中的一列具有总花费的时间,也就是说,它可以采用以下格式,46:23:12 – 读取为46小时23分12秒.

我理解如何读取日期和时间值,我通常将它们存储在java.util.Date中.这里的问题是这是一个持续时间,花费的时间可能超过24.哪种数据类型适合这个?我如何使用POI阅读此内容?

解决方法:

在Java 8中,时间量由class java.time.Duration表示.

我不确定Apache POI是否有直接处理持续时间的方法,所以我认为最好的方法是将值作为String,
然后解析此String以获取值并将这些值添加到Duration:

String s = "46:23:12";
String[] values = s.split(":");
// get the hours, minutes and seconds value and add it to the duration
Duration duration = Duration.ofHours(Integer.parseInt(values[0]));
duration = duration.plusMinutes(Integer.parseInt(values[1]));
duration = duration.plusSeconds(Integer.parseInt(values[2]));

持续时间对象将包含与输入相等的金额(在这种情况下:46小时,23分钟和12秒).如果调用duration.toString(),它将在ISO 8601 format中返回此持续时间:

PT46H23M12S

当然,此代码假定输入String始终包含三个字段(小时,分钟和秒).但是您可以在解析值之前检查values.length(并且仅当相应的值不为零时才调用plus方法).

如果您使用Java< = 7,则可以使用ThreeTen Backport,这是Java 8的新日期/时间类的一个很好的后端.对于Android,有ThreeTenABP(更多关于如何使用它here).

唯一的区别是包名称(在Java 8中是java.time,在ThreeTen Backport(或Android的ThreeTenABP)中是org.threeten.bp),但类和方法名称是相同的.

上一篇:如何将MySQL中的持续时间值存储为TIME数据类型?


下一篇:Uber Go 语言编程规范:使用time处理时间