问题描述
||
我正在通过Java日期库
1. java.util.Date,
2. Date4J
3.乔达时间
找出我是否可以对两个Date对象执行时间减法,精确到毫秒。
我收到2011-05-29T22:50:12.692作为字符串,并通过使用SimpleDateFormat对其进行解析将其转换为Date对象。
另一个Date对象也将收到一个字符串。我想从两个Date对象减去。
有任何想法吗?
基本上我想得到两个Date对象之间的间隔,以毫秒为单位的精度。
解决方法
尝试使用Date.getTime()
long timeBetweenInMillis = d2.getTime() - d1.getTime();
编辑
假设ѭ1在时间上在after2之后。
, 在java.util.Date中,有一种名为Date.getTime()
的方法,您可以使用该方法来获取时间。
, 你是这个意思吗
Date d1 =
Date d2 =
long intervalInMillis = d1.getTime() - d2.getTime();
, Date()对象的内部表示形式是经过纪元的毫秒数。只需使用getTime()方法获取这些值并对它们进行算术运算即可。然后,您可以基于该值构造一个新的Date对象,然后完成。
, 只求毫秒差:
long millis = date1.getTime() - date2.getTime();
, 您可以利用XMLGregorianCalendar代替SimpleDateFormat(请注意,SimpleDateFormat不是线程安全的:http://www.codefutures.com/weblog/andygrove/2007/10/simpledateformat-and-thread-safety.html):
import javax.xml.datatype.DatatypeFactory;
import javax.xml.datatype.XMLGregorianCalendar;
public class Demo {
public static void main(String[] args) throws Exception {
DatatypeFactory df = DatatypeFactory.newInstance();
XMLGregorianCalendar date2 = df.newXMLGregorianCalendar(\"2011-05-29T22:50:12.692\");
XMLGregorianCalendar date1 = df.newXMLGregorianCalendar(\"2011-03-29T22:50:12.692\");
System.out.println(date2.toGregorianCalendar().getTimeInMillis() - date1.toGregorianCalendar().getTimeInMillis());
}
}
, 这就是你想要的:
Date result = new Date(d2.getTime() - d1.getTime());
说明:
d2.getTime() - d1.getTime()
返回日期之间的毫秒差
new Date(milliseconds);
创建一个新的Date对象,该对象设置为自纪元以来的毫秒数。
编辑
如果您只想要积极的区别,请将其更改为此。这样,您输入的顺序无关紧要:
Date result = new Date(Math.abs(d2.getTime() - d1.getTime()));