Добавьте миллисекунды к дате Java, когда миллисекунды длинные
Я ищу лучший способ добавить миллисекунды к дате Java, когда миллисекунды хранятся как "длинные". В календаре Java есть функция добавления, но в качестве суммы берется только int.
Это одно решение, которое я предлагаю...
Calendar now = Calendar.getInstance();
Calendar timeout = Calendar.getInstance();
timeout.setTime(token.getCreatedOn());
timeout.setTimeInMillis(timeout.getTimeInMillis() + token.getExpiresIn());
Есть еще предложения?
Ответы
Ответ 1
На самом деле ваше решение выглядит для меня почти нормально. Первоначально я опубликовал ответ через Date
, когда я не учел getTimeInMillis
и setTimeInMillis
должным образом.
Однако вы звоните setTime
, а затем setTimeInMillis
, что мне кажется несколько излишним. Ваш код выглядит примерно так:
Calendar timeout = Calendar.getInstance();
timeout.setTimeInMillis(token.getCreatedOn().getTime() + token.getExpiresIn());
Как правило, более приятной альтернативой было бы использование Joda Time, хотя :) Это, как правило, гораздо более приятный API даты и времени.
Ответ 2
Вы также можете создать дату с текущей локальной датой плюс количество миллисекунд, которое нужно добавить в качестве времени истечения
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);
Если вы используете существующий объект Date, вы можете сделать:
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);
Ответ 3
Календарь - довольно дорогой объект Date, и его функциональность не самая лучшая. Если вам нужен универсальный объект Date, я предлагаю посмотреть JODA Time, и он имеет функцию, которая делает то, что вы хотите.
Однако более простой объект Java Date - это класс Date, как указывает @Dubas.
Еще проще для типа выполняемой операции - использовать long. Это также намного быстрее.
long timeoutMS = token.getCreatedOn() + token.getExpiresIn();
Я использую long (в GMT) для всех своих дат и использую только Date для слоя представления. то есть. когда вы хотите конвертировать дату в текст.