添加/减去两个Date对象的Java库,精度为毫秒

时间:2011-05-27 14:54:33

标签: java time iso

我正在寻找通过Java Date库 1. java.util.Date, 2. Date4J 3. Joda-time

找出我是否可以对两个日期对象执行时间减法,精确到毫秒。

我收到2011-05-29T22:50:12.692作为String,并通过使用SimpleDateFormat解析它将其转换为Date对象。

另一个Date对象也将收到一个String。我想从两个Date对象中减去。

有什么想法吗?

基本上我想获得两个Date对象之间的间隔,精确到毫秒。

7 个答案:

答案 0 :(得分:9)

尝试使用Date.getTime()

long timeBetweenInMillis = d2.getTime() - d1.getTime();

修改

这假设d2 d1之后按时间顺序排列。

答案 1 :(得分:2)

在java.util.Date中有一个名为Date.getTime()的方法,你可以用它来获取时间。

答案 2 :(得分:1)

你的意思是这样吗?

Date d1 = 
Date d2 =
long intervalInMillis = d1.getTime() - d2.getTime();

答案 3 :(得分:1)

Date()对象的内部表示是超过纪元的毫秒数。只需使用getTime()方法获取这些值并对它们进行算术运算。然后,您可以基于该值构造一个新的Date对象,并且完成了。

答案 4 :(得分:1)

得到毫秒的差异:

long millis = date1.getTime() - date2.getTime();

答案 5 :(得分:0)

您可以利用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());
    }

}

答案 6 :(得分:0)

这就是你想要的:

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()));