我正在寻找通过 java 日期库 1.java.util.Date,2.Date4J 3.Joda-time
找出我是否可以对两个日期对象执行时间减法,精确到毫秒。
我收到 2011-05-29T22:50:12.692 作为字符串,并通过使用 SimpleDateFormat 解析将其转换为 Date 对象。
另一个 Date 对象也将收到一个字符串。我想从两个 Date 对象中减去。
有任何想法吗?
基本上我想得到两个 Date 对象之间的间隔,精确到毫秒。
在 java.util.Date 中有一个名为的方法Date.getTime()
,您可以使用它来获取以英里为单位的时间。
你的意思是这样吗?
Date d1 =
Date d2 =
long intervalInMillis = d1.getTime() - d2.getTime();
Date() 对象的内部表示是经过纪元的毫秒数。只需使用 getTime() 方法获取这些值并对其进行算术运算。然后,您可以根据该值构造一个新的 Date 对象,然后就完成了。
只需获得毫秒差异:
long millis = date1.getTime() - date2.getTime();
这就是你想要的:
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()));
您可以利用 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());
}
}