我正在使用适用于 Java 的 POI API 自动生成一份 Excel 报告。我将使用 POI 阅读、处理它们并创建新的 Excel 报告。
excel 文件中的一列有总花费时间,也就是说,它可以采用以下格式,46:23:12
- 这显示为 46 小时 23 分钟 12秒
。
我了解如何读取日期和时间值,并且通常将它们存储在 java.util.Date
中。这里的问题是这是一个持续时间,花费的时间可能超过 24 小时。哪种数据类型适合这个?我如何使用 POI 阅读此内容?
最佳答案
在 Java 8 中,时间量由 class java.time.Duration
表示.
我不确定 Apache POI 是否有直接处理 Duration
的方法,所以我认为最好的方法是获取 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]));
duration
对象将包含相当于输入的量(在本例中: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
),但是类和方法名称相同。
关于java - 如何在 Java 中存储花费的时间或总持续时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45192499/