Java:如何从LocalTime Object获取总分钟数

时间:2018-03-16 23:23:17

标签: java time java-time datetime-parsing

我想在我的jtable中获取本地时间对象的总分钟数。因为我没有找到任何方法,我试图将其转换为字符串,然后将字符串转换为分钟。

纳秒的长度总是根据表输入而改变,然后抛出DateTimeParseException。

如何在没有解析异常的情况下转换它?

以下是我使用的代码:

String pause = String.valueOf(table.getValueAt(zeile, 4));
DateTimeFormatter formatter  = DateTimeFormatter.ofPattern("HH:mm:ss.SSSSSS");
LocalTime localTime1 = LocalTime.parse(pause, formatter);

引发以下错误:

Exception in thread "AWT-EventQueue-0" java.time.format.DateTimeParseException: Text '00:21:07.480781500' could not be parsed, unparsed text found at index 15

4 个答案:

答案 0 :(得分:2)

使用这种格式,您不需要格式化程序,只需执行以下操作:

LocalTime localTime1 = LocalTime.parse(pause);

所有java.time类都可以直接解析字符串,如果它是ISO8601格式,则情况如下:https://en.m.wikipedia.org/wiki/ISO_8601

答案 1 :(得分:1)

我怀疑你的00:21:07.480781500实际上是你休息或暂停的长度,所以是持续时间,一段时间。如果是这样,你实际上在表格单元格中使用了错误的类。

  • Duration持续时间,一段时间,例如21分钟和几秒钟。
  • LocalTime表示从00:00:00到23:59:59.999999999的一天中的时间。

如果我明白你的意思,从一段时间内得到总分钟是有道理的,从LocalTime得到它们并不是真的。

Duration的挑战是为用户很好地格式化它。然而,已经在许多问题和答案中解决了这个问题。因此,您可以找到解决方案in this question: How to format a duration in java? (e.g format H:MM:SS)和/或搜索其他问题和答案。我认为您需要继承DefaultTableCellRenderer以在表格中显示格式化的Duration。作为回报,让分钟很简单:

    Duration pause = (Duration) table.getValueAt(zeile, 4);
    long result = pause.toMinutes();
    System.out.println("result: " + result);

打印出来:

  

结果:21

如果您真的想要一天中的某个时间,那么您当然应该保留LocalTime个对象。然后答案是:

    LocalTime pause = (LocalTime) table.getValueAt(zeile, 4);
    int result = pause.get(ChronoField.MINUTE_OF_DAY);
    System.out.println("result: " + result);

输出相同:

  

结果:21

答案 2 :(得分:0)

尝试

    DateTimeFormatter formatter  = DateTimeFormatter.ofPattern("HH:mm:ss.SSSSSSSSS");

传递给parse方法的时间有毫秒的9个字符,但是你的格式字符串只指定了6个。

答案 3 :(得分:0)

解析字符串时,格式与我用String.valueOf()获得的值不同 - 方法。

我设法得到这样的会议记录:

String pause = String.valueOf(table.getValueAt(zeile, 4));
if (pause.length()>5) {
        pause = pause.substring(0,pause.indexOf(':') + 3);
}
String[] split = pause.split(":");
int hours = Integer.parseInt(split[0]);
int minutes = Integer.parseInt(split[1]);
int result = hours * 60 + minutes;
System.out.println("result: " + result);

有更优雅的方式来做这件事还是正确的?