我目前正在試驗,以達到以下目的:Java中的日期總是1小時?
- 我創建一個Android應用程序,以幫助我在工作中管理ROTAS。更多的空閒時間項目,真正幫助。
- 對於每位員工,我可以將開始時間和結束時間設置爲以下格式的字符串:「HH:mm」。
- 我需要計算總小時數,然後計算總小時數,包括休息時間。
- 下面,如果有人工作超過3小時45分鐘但少於6小時,我希望他們有15分鐘的休息時間。
- 例如,如果某人工作4小時(總時間爲04:00),他們將得到15分鐘的休息時間(包括休息時間的小時03:45)。
問題:目前,如果我設置時間06:00結束,開始在10:00我希望它給我總學時爲4小時,包括休息爲3小時45分鐘。實際上,它給我的總小時數爲5,小時數包括休息時間爲5小時45分鐘。
private String calcDiffInHoursAsString(Date start, Date finish){
try{
DateFormat formatter = new SimpleDateFormat("HH:mm");
long diffInMillis = finish.getTime() - start.getTime();
Date diffAsDate = new Date(diffInMillis);
String diffAsHours = formatter.format(diffAsDate);
return diffAsHours;
}catch(Exception ex){
return "";
}
}
private Date calcDiffInHoursAsDate(Date start, Date finish){
try{
DateFormat formatter = new SimpleDateFormat("HH:mm");
long diffInMillis = finish.getTime() - start.getTime();
Date diffAsDate = new Date(diffInMillis);
return diffAsDate;
}catch(Exception ex){
return new Date();
}
}
private String calcHoursToString(String start, String finish){
if (!(start == "00:00" && finish == "00:00")){
try{
DateFormat formatter = new SimpleDateFormat("HH:mm");
Date startTime = formatter.parse(start);
Date finishTime = formatter.parse(finish);
Date HoursExcBreaks = calcDiffInHoursAsDate(startTime, finishTime);
String HoursExcBreaksAsString = calcDiffInHoursAsString(startTime, finishTime);
Log.d("Difference exc. Breaks", HoursExcBreaksAsString);
// Breaks:
// < 4 hours - No Break
// 4 - 6 hours - 15 Minutes
// 6 - 8 hours - 30 Minutes
// 8 - 9 hours - 45 Minutes
// Work out actual hours after breaks
// If HoursExcBreaks > 03:45 and HoursExcBreaks < 06:00 then take 00:15 break...
if (HoursExcBreaks.before(formatter.parse("06:00")) && HoursExcBreaks.after(formatter.parse("03:45"))){
long millisecondsIncBreak = HoursExcBreaks.getTime() - formatter.parse("00:15").getTime();
Date dateIncBreak = new Date(millisecondsIncBreak);
String hoursIncBreak = formatter.format(dateIncBreak);
Log.d("Shift Inc Breaks", hoursIncBreak);
}
}catch(Exception ex){
Context context = getActivity();
CharSequence text = ex.getMessage();
int duration = Toast.LENGTH_SHORT;
Toast toast = Toast.makeText(context, text, duration);
toast.show();
}
}
return "";
}
所以,當我打電話:
calcHoursToString("06:00", "10:00");
我得到包括假期,因爲在一個字符串03:45移位長度。
事實是,我甚至不確定這是解決問題的最好方法嗎?這可能不是! :)
只是好奇,你在什麼時區? – 323go
你不顯示你如何獲得投入和他們有什麼價值。我可以向你保證,基本的計算工作,所以它必須是你的輸入值和/或推理。最好的方法是使用調試器並檢查值。我想你會發現他們不是你所想的那樣。您也可以複製/粘貼到Excel(或類似)來驗證計算。 – Simon
@Simon我也可以向你保證他們沒有。我試着把輸入完全取出來,並將值放入java中,但它的結果相同。我檢查的第一件事是它從輸入中獲得正確的數據。正如你在上面看到的,我現在已經完全忽略了輸入,並把字符串放在自己的頭上。 –