java Date日期時間相減 精確到毫秒

本人是代碼菜鳥
首先按照從其他地方介紹的普遍的計算方式,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;
	}
}

得到輸出結果
在這裏插入圖片描述
完美!
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章