Android:如何在变量中添加5次并获得它们的总秒数

问题描述 投票:-2回答:2

就像我有5次

1. 05:12:02
2. 19:12:52
3. 40:12:14
4. 56:54:10
5. 41:12:12
-----------
Total Seconds : 0#####..`
-----------

我想这样,我怎么能请你帮助我。

我能用这个吗? :

 public String addTime(int hour, int minute, int minutesToAdd) {
    Calendar calendar = new GregorianCalendar(1990, 1, 1, hour, minute);
    calendar.add(Calendar.MINUTE, minutesToAdd);
    SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
    String date = sdf.format(calendar.getTime());
    return date;
}
android time duration seconds
2个回答
0
投票

一个简单的方法,如果格式是你指向的格式,而不必担心转换日期如下:

int totalSum = getSecondsFromDate("05:12:02") + getSecondsFromDate("19:12:52") + getSecondsFromDate("40:12:14") + getSecondsFromDate("56:54:10") + getSecondsFromDate("41:12:12");

private int getSecondsFromDate(String date){
  //We split the date to have hours, minutes and seconds
  String splitDate = date.split(":");
  int hours = Integer.parseInt(splitDate[0]);
  int minutes = Integer.parseInt(splitDate[1]);
  int seconds = Integer.parseInt(splitDate[2]);

  int totalSeconds = (hours*60*60) + (minutes*60) + seconds;
  return totalSeconds;
}

2
投票

使用java.time中的Duration类(现代Java日期和时间API):

    String[] times = {
            "05:12:02",
            "19:12:52",
            "40:12:14",
            "56:54:10",
            "41:12:12"
    };
    Duration timeSum = Duration.ZERO;
    for (String time : times) {
        // reformat to ISO 8601
        time = time.replaceFirst("(\\d{2}):(\\d{2}):(\\d{2})", "PT$1H$2M$3S");
        // add
        timeSum = timeSum.plus(Duration.parse(time));
    }
    System.out.println("Total seconds: " + timeSum.getSeconds());

输出:

总秒数:585810

Duration类不能直接解析你的时间字符串。它解析ISO 8601标准格式,因此我使用正则表达式将05:12:02转换为PT05H12M02S。然后我把它喂给Duration.parse。您可以将ISO 8601字符串读作“05小时12分02秒的时间段”。

适用于日期和时间的课程 - DateCalendarLocalTime等 - 适合一段时间。 DateCalendar长期过时且设计不佳,所以不要尝试那些。虽然不可能通过,但也有一些陷阱,即使你成功了,也很难阅读代码并说服自己这是正确的。

问题:我可以在Android上使用java.time吗?

是的,java.time适用于较旧和较新的Android设备。它至少需要Java 6。

  • 在Java 8及更高版本和更新的Android设备上(从API级别26,我被告知)现代API内置。
  • 在Java 6和7中获取ThreeTen Backport,新类的后端端口(适用于JSR 310的ThreeTen;请参见底部的链接)。上面的代码是从后端开发并使用org.threeten.bp.Duration运行的。
  • 在(较旧的)Android上使用Android版的ThreeTen Backport。它被称为ThreeTenABP。并确保从org.threeten.bp导入子包的日期和时间类。

链接

© www.soinside.com 2019 - 2024. All rights reserved.