Добавить миллисекунды до даты Java, когда миллисекунды длинные

Я ищу лучший способ добавить миллисекунды к Java Date, когда миллисекунды хранятся как «длинные». В календаре Java есть функция add , но она принимает в качестве суммы только int.

Это одно из решений, которое я предлагаю ...

Calendar now = Calendar.getInstance();
Calendar timeout = Calendar.getInstance();

timeout.setTime(token.getCreatedOn());
timeout.setTimeInMillis(timeout.getTimeInMillis() + token.getExpiresIn());

Есть другие предложения?

19
задан Jonathan Leffler 5 May 2012 в 01:39
поделиться

3 ответа

Ваше решение мне кажется почти нормальным. Первоначально я отправил ответ через Date , когда я не учел должным образом getTimeInMillis и setTimeInMillis .

Однако вы вызываете setTime и , затем setTimeInMillis , что мне кажется несколько избыточным. Ваш код выглядит примерно так:

Calendar timeout = Calendar.getInstance();
timeout.setTimeInMillis(token.getCreatedOn().getTime() + token.getExpiresIn());

В целом более приятной альтернативой было бы использование Joda Time , хотя :) Обычно это гораздо более удобный API даты / времени.

24
ответ дан 30 November 2019 в 02:56
поделиться

Calendar - довольно дорогой объект Date, и его функциональность не самая лучшая. Если вам нужен универсальный объект Date, я предлагаю взглянуть на JODA Time , и у него есть функция, которая делает то, что вы хотите.

Однако более простой объект Java Date - это класс Date, как указывает @Dubas.

Еще проще для типа выполняемой вами операции - использовать long. Это тоже намного быстрее.

long timeoutMS = token.getCreatedOn() + token.getExpiresIn(); 

Я использую long (по Гринвичу) для всех дат и использую только Date для уровня представления. т.е. если вы хотите преобразовать дату в текст.

1
ответ дан 30 November 2019 в 02:56
поделиться

Вы также можете создать дату с текущей местной датой плюс количество миллисекунд, которое вам нужно добавить как Срок действия

import java.util.Date;

long expiremilis = 60000l; //  1 minute
// Expires in one minute from now
Date expireDate = new Date(System.currentTimeMillis() + expiremilis);

Или то же самое с календарем

long expiremilis = 60000l; // 1 minute
Calendar expireDate= Calendar.getInstance();
// Expires on one minute from now
expireDate.setTimeInMillis(System.currentTimeMillis() + expiremilis);

Если вы используете существующий Объект даты, который вы можете сделать:

import java.util.Date;

long expiremilis = 60000l; // 1 minute
// Expires on one minute from the date object date
Date expireDate = new Date(myDate.getTime() + expiremilis);

И с существующим объектом календаря

long expiremilis = 60000l; // 1 minute
Calendar expireDate= Calendar.getInstance();
// Expires on one minute from the calendar date
expireDate.setTimeInMillis(myCalendar.getTimeInMillis() + expiremilis);
20
ответ дан 30 November 2019 в 02:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: