形式で 2 つの文字列の期間を取得するにはどうすればよいですYYYYMMDDTHHMMSS
か?
Calendar クラスを使用してgetTimeInMillis()
. これに関して私が抱えている問題は、一貫性がないことです。私が間違っていることは何ですか?このプログラムを実行するたびに、コンソールに 40 ~ 70 行の出力が表示されます。
public class DurationTester {
/**
* Get the duration between two given times
* @param time1 yyyymmddThhmmss
* @param time2 yyyymmddThhmmss
* @return minutes between time1 and time2
*/
public static int getDuration(String time1, String time2){
int yyyy1 = Integer.parseInt(time1.substring(0,4));
int mm1 = Integer.parseInt(time1.substring(4,6));
int dd1 = Integer.parseInt(time1.substring(6,8));
int hh1 = Integer.parseInt(time1.substring(9,11));
int min1 = Integer.parseInt(time1.substring(11,13));
int yyyy2 = Integer.parseInt(time2.substring(0,4));
int mm2 = Integer.parseInt(time2.substring(4,6));
int dd2 = Integer.parseInt(time2.substring(6,8));
int hh2 = Integer.parseInt(time2.substring(9,11));
int min2 = Integer.parseInt(time2.substring(11,13));
Calendar cal1 = Calendar.getInstance();
cal1.set(yyyy1, mm1, dd1, hh1, min1, 0);
Calendar cal2 = Calendar.getInstance();
cal2.set(yyyy2, mm2, dd2, hh2, min2, 0);
long milliSec = cal1.getTimeInMillis()-cal2.getTimeInMillis();
long nonNegativeMS = Math.abs(milliSec);
long seconds = nonNegativeMS / 1000;
long minutes = seconds / 60;
return (int)minutes;
}
public static void main(String[] args){
String t1 = "20130108T150000";
String t2 = "20130108T131500";
int errors = 0;
for(int i=0; i<5000; i++){
int duration = getDuration(t1,t2);
if(duration == 104){
System.out.println("ERROR: Should only be 105 ("+errors++ +")");
}
}
}
}