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;
	}
}

得到输出结果
在这里插入图片描述
完美!
在这里插入图片描述

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