Библиотека Java, которая добавляет / вычитает два объекта Date с точностью до миллисекунд - PullRequest
1 голос
/ 27 мая 2011

Я просматривал библиотеки даты Java 1. java.util.Date, 2. Date4J 3. Joda-time

, чтобы выяснить, могу ли я выполнить вычитание времени для двух объектов Date с точностью домиллисекунды.

Я получаю 2011-05-29T22: 50: 12.692 в виде строки и преобразую его в объект Date, анализируя его с помощью SimpleDateFormat.

Другой объект Date также будет полученстрока.и я хочу вычесть из двух объектов Date.

Есть идеи?

По сути, я хочу получить интервал между двумя объектами Date с точностью до миллисекунд.

Ответы [ 7 ]

9 голосов
/ 27 мая 2011

Попробуйте использовать Date.getTime ()

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

РЕДАКТИРОВАТЬ

Это предполагает, что d2 равно в хронологическом порядке после d1.

2 голосов
/ 27 мая 2011

в java.util.Date есть метод с именем Date.getTime(), который вы можете использовать, чтобы получить время в миль.

1 голос
/ 27 мая 2011

Просто получите разницу в миллисекундах:

long millis = date1.getTime() - date2.getTime();
1 голос
/ 27 мая 2011

Внутренним представлением объекта Date () является количество миллисекунд, прошедших с начала эпохи.Просто получите эти значения с помощью метода getTime () и выполните арифметику с ними.Затем вы можете построить новый объект Date на основе этого значения, и все готово.

1 голос
/ 27 мая 2011

Вы имеете в виду, как это?

Date d1 = 
Date d2 =
long intervalInMillis = d1.getTime() - d2.getTime();
0 голосов
/ 27 мая 2011

Это то, что вы хотите:

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()));
0 голосов
/ 27 мая 2011

Вы можете использовать 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());
    }

}
...