java Date日期时间相减 精确到毫秒
程序员文章站
2022-05-27 20:32:01
...
本人是代码菜鸟
首先按照从其他地方介绍的普遍的计算方式,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()一下康康
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;
}
}
得到输出结果
完美!
上一篇: 吃杨桃过敏吗?杨桃过敏的症状
下一篇: python使用turtle库绘制时钟
推荐阅读
-
java获取时间戳精确到毫秒(java获取时间戳精确到微秒讲解)
-
java获取时间戳精确到毫秒(java获取时间戳精确到微秒讲解)
-
前端js日期控件传时间类型到java后台转Date类型
-
java Date日期时间相减 精确到毫秒
-
java将日期时间字符串转成日期插入到oracle的date字段
-
前端js日期控件传时间类型到java后台转Date类型
-
java将日期时间字符串转成日期插入到oracle的date字段
-
java代码计算2个时间差,精确到 天、月、日、时、分、秒、毫秒
-
java代码计算2个时间差,精确到 天、月、日、时、分、秒、毫秒
-
php获取当前时间戳、日期并精确到毫秒(三种方法)