2012-01-18 8 views
0

私はコードをほぼ完成させましたが、まだ助けが必要です。このコードは、minutesstartTimeを追加したことに基づいてnewTimeを計算します。 minutes問題は、現在の例では、それは出力「0:10」なければならないということですが、それは「23:70」を出力する60以上の値を持っている..."HH:MM"文字列にさらに時間を追加するコード

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

可能重複[文字列に整数分の変換 "HH:MMを"](のhttp:/ /stackoverflow.com/questions/8916472/convert-integer-minutes-into-string-hhmm) –

+0

Jon Skeet comment = +1! – eboix

+0

なぜ負の分を処理するコードがありますか? '00:-1'は意味がありますか?もしそうなら、あなたは '-1:00'を持つことができますか?または '-1:-1'? –

答えて

1

は私が合計数を計算する提案するかもしれません単一の値、として真夜中から数分後、所望の量を追加し、次いで得られた時間と分を再計算する:

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変数を追加すべきではありません- 互換性のないユニットです。

2

についてどのように:

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分=午後12時10

関連する問題