Код для добавления большего количества минут к строке "ЧЧ: ММ" - PullRequest
0 голосов
/ 19 января 2012

Я почти закончил код, но все же мне нужна помощь. Этот код вычисляет newTime на основе добавления minutes к startTime. minutes может иметь значения больше 60. Проблема в том, что в текущем примере он должен вывести «00:10», но выдает «23:70» ...

    String startTime = "23:40";
    int minutes = 30;
    String[] hm = startTime.split(":");
    int h = minutes / 60 + Integer.parseInt(hm[0]);
    int m = minutes % 60 + Integer.parseInt(hm[1]);
    if (m<0) {
        if (h==0) 
            h=23;
        else 
            h = h-1;
        m = 60+m;
    }
    String newTime = String.format("%02d", h)+":"+String.format("%02d", m); 
    System.out.println(newTime);

Ответы [ 2 ]

2 голосов
/ 19 января 2012

Как насчет:

import java.util.*;
import java.util.regex.*;

...

String startTime = "23:40";
int additionalMinutes = 30;

Pattern pat = Pattern.compile( "(\\d+):(\\d+)" );
Matcher x = pat.matcher(startTime);
if (x.matches())
{
    int h = Integer.parseInt(x.group(1));
    int m = Integer.parseInt(x.group(2));

    Calendar cal = Calendar.getInstance();
    cal.set(Calendar.HOUR, h);
    cal.set(Calendar.MINUTE, m);
    cal.add(Calendar.MINUTE, additionalMinutes);

    h = cal.get(Calendar.HOUR);
    m = cal.get(Calendar.MINUTE);

    System.out.println(
            "Start: " + startTime + 
            " + " + additionalMinutes + " minutes = " +
            h + ":" + m );
}
else
{
    /* bad format */
}

Вывод: запуск: 23:40 + 30 минут = 0: 10

1 голос
/ 19 января 2012

Я предлагаю рассчитать общее количество минут с полуночи в виде единого значения, , затем , добавить желаемое количество и затем пересчитать полученные часы и минуты:

String startTime = "23:40";
int minutes = 30;

String[] hm = startTime.split(":");
int h = Integer.parseInt(hm[0]);
int m = Integer.parseInt(hm[1]);

int t = h * 60 + m;      // total minutes
t += minutes;            // add the desired offset

while (t < 0) {          // fix `t` so that it's never negative
  t += 1440;             // 1440 minutes in a day
}

int nh = (t / 60) % 24;  // calculate new hours
int nm = t % 60;         // calculate new minutes

String newTime = String.format("%02d:%02d", nh, nm); 

Вы абсолютно не должен добавлять вашу переменную minutes к вычислению h - это несовместимые единицы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...