Добавьте миллисекунды к дате Java, когда миллисекунды длинные - PullRequest
19 голосов
/ 11 августа 2010

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

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

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

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

Любые другие предложения?

Ответы [ 3 ]

23 голосов
/ 11 августа 2010

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

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

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

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

19 голосов
/ 11 августа 2010

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

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);
1 голос
/ 12 августа 2010

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

Однако более простым объектом Java Date является класс Date как @Дубас указывает.

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

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

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

...