1

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

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

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

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

有任何想法吗?

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

4

7 回答 7

9

尝试使用Date.getTime()

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

编辑

这假设按d2时间顺序在 之后 d1

于 2011-05-27T14:56:30.123 回答
2

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

于 2011-05-27T14:57:36.230 回答
1

你的意思是这样吗?

Date d1 = 
Date d2 =
long intervalInMillis = d1.getTime() - d2.getTime();
于 2011-05-27T14:57:15.730 回答
1

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

于 2011-05-27T14:57:29.107 回答
1

只需获得毫秒差异:

long millis = date1.getTime() - date2.getTime();
于 2011-05-27T14:57:37.913 回答
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()));
于 2011-05-27T18:46:20.067 回答
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());
    }

}
于 2011-05-27T15:33:57.337 回答