本人是代碼菜鳥
首先按照從其他地方介紹的普遍的計算方式,Date.getTime獲取日期時間的long值來相減
//設置Date格式爲“年-月-日 小時:分鐘:秒.毫秒”
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
//設置時間,String轉爲Date
String strStart = "2019-11-11 11:11:50.5";
String strEnd = "2019-11-11 11:11:50.555";
Date dateStart = sdf.parse(strStart);
Date dateEnd = sdf.parse(strEnd);
//直接獲取Date的long值相減
long duration = dateEnd.getTime() - dateStart.getTime();
System.out.println("duration:" + duration);
得到結果爲
這裏計算似乎不對,只看末尾的秒,難道不是應該等於下面這個麼?
50.555 - 50.5 = 0.055
這個是以秒爲單位的結果,轉換爲毫秒*1000則結果爲 55
來輸出Date.getTime()一下康康(getTime()返回Date的long值)
String strStart = "2019-11-11 11:11:50.5";
String strEnd = "2019-11-11 11:11:50.555";
...
System.out.println("dateStart.getTime:" + dateStart.getTime());
System.out.println("dateEnd.getTime:" + dateEnd.getTime());
控制檯輸出結果爲
注意看dateStart,原來是小數點後補0時,Date類默認補在前面了,所以需要對strStart末尾補0再轉爲Date
整個程序完整代碼如下
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateDuration {
public static void main(String[] args) throws ParseException {
//設置時間,String轉爲Date
String strStart = "2019-11-11 11:11:50.5";
String strEnd = "2019-11-11 11:11:50.555";
long duration = calculateDuration(strStart,strEnd);
System.out.println("duration:" + duration);
}
/**計算日期時長,以毫秒爲單位返回
* @author mingliuTester
* @param strStart 開始日期時間字符串
* @param strEnd 結束日期時間字符串
* @throws ParseException
*/
public static long calculateDuration(String strStart, String strEnd) throws ParseException{
//設置Date格式爲“年-月-日 小時:分鐘:秒.毫秒”
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
//字符串補0
strStart = addZero(strStart);
strEnd = addZero(strEnd);
//String轉換爲Date類型
Date dateStart = sdf.parse(strStart);
Date dateEnd = sdf.parse(strEnd);
System.out.println("dateStart.getTime:" + dateStart.getTime());
System.out.println("dateEnd.getTime:" + dateEnd.getTime());
//對date的long值相減得到以毫秒爲單位相減的結果,Date.getTime()獲取long值
long duration = dateEnd.getTime() - dateStart.getTime();
return duration;
}
/**末尾補0,這裏以保留小數點到後三位爲例
* @author mingliuTester
* @param str
*/
public static String addZero(String str){
//計算字符串長度和點的位置差值
int pointPosition = str.length() - str.lastIndexOf('.');
//根據位置差值補0
switch (pointPosition){
//正好保留到小數點後3位
case 4:
break;
//正好保留到小數點後2位
case 3:
str += "0";
//正好保留到小數點後1位
case 2:
str += "00";
//默認當做沒有保留小數
default:
str += ".000";
break;
}
return str;
}
}
得到輸出結果
完美!