[英]Time calculation with negative value results Java
我想計算開始時間和結束時間之間的差。 采用HH:mm
格式。
例如,第二天的開始時間是22.00
,結束時間是1.00
,我會收到一個負值。
如何讓程序知道結束時間是第二天?
我的劇本:
public void setBeginTijd()
{
String dateStart = "22:00";
String dateEnd = "1:00";
SimpleDateFormat format = new SimpleDateFormat("HH:mm");
Date d1 = null;
Date d2 = null;
try
{
d1 = format.parse(dateStart);
d2 = format.parse(dateEnd);
long diff = d2.getTime() - d1.getTime();
long diffMinutes = diff / (60 * 1000) % 60;
long diffHours = diff / (60 * 60 * 1000) % 24;
System.out.println(diffMinutes);
System.out.println(diffHours);
}
catch (Exception e)
{
e.printStackTrace();
}
}
如果您可以假設 ,當時間為負數時,第二次時間必須是第二天,那么您可以簡單地說
if (diff < 0)
{
diff = (24 * 60 * 60 * 1000) + diff;
}
編輯來詳細說明這一點,也回應評論:當然,這是一個非常簡單的解決方案。 它不能處理第二個日期是兩天后的情況。 它不處理DST開關。 它不處理1927年12月31日在上海的時區更改 。 它不能替代帶有所有警告的正確建模日期。 這是一種盡力而為的方法,可以(可以)從給定信息中得出什么。
嘗試這個
SimpleDateFormat formatNextDay = new SimpleDateFormat("dd:HH:mm");
boolean isNextDay=false;
try {
if (d1.after(d2)) {
isNextDay=true;
d1 = formatNextDay.parse("1:" + dateStart);
d2 = formatNextDay.parse("2:" + dateEnd);
}
您應該包括日期,月份和年份。
這是Java在運行程序后的日期:
d1 = Thu Jan 01 22:00:00 CET 1970
d2 = Thu Jan 01 01:00:00 CET 1970
正如某些人已經提到的,重要的是還要知道每個事件的日期,月份和年份,以計算非同一天的事件的時間段。
我修改了您認為可以幫助您的方法:
public void setBeginTijd()
{
String dateStart = "22.08.2014 22:00";
String dateEnd = "25.08.2014 01:00";
SimpleDateFormat fullFormat = new SimpleDateFormat("dd.MM.yyyy HH:mm");
Date d1 = null;
Date d2 = null;
try
{
d1 = fullFormat.parse(dateStart);
d2 = fullFormat.parse(dateEnd);
long diff = d2.getTime() - d1.getTime();
long diffMinutes = diff / (60 * 1000) % 60;
long diffHours = diff / (60 * 60 * 1000) % 24;
long diffDays = diff / (24 * 60 * 60 * 1000);
System.out.println("Delta minutes: " + diffMinutes);
System.out.println("Delta hours: " + diffHours);
System.out.println("Delta days: " + diffDays);
}
catch (Exception e)
{
e.printStackTrace();
}
}
這是小時和分鍾時差的正確數學。 當您對int / long值進行運算時,十進制小數的剝離會自動發生。
long diff = d2.getTime() - d1.getTime();
long diffHours = diff / 1000 / 60 / 60;
long diffMinutes = diff / 1000 / 60 - diffHours * 60;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.