getMilliseconds () из Java Date - PullRequest
       19

getMilliseconds () из Java Date

9 голосов
/ 20 января 2011

Мне нужна функция, как long getMillis (Date aDate);

, который возвращает миллисекунды секунды Date. Я не могу использовать Yoda, SimpleDateFormat или другие библиотеки, потому что это код gwt.

Мое текущее решение делает date.getTime() % 1000

Есть ли лучший способ?

Ответы [ 3 ]

6 голосов
/ 20 января 2011

Как указал Питер Лори, в общем вам нужно что-то вроде

int n = (int) (date.getTime() % 1000);
return n<0 ? n+1000 : n;

, поскольку % работает "странным" образом в Java. Я называю это странным, поскольку мне всегда нужно, чтобы результат попадал в заданный диапазон (здесь: 0..999), а не иногда получал отрицательные результаты. К сожалению, он работает таким образом на большинстве процессоров и на большинстве языков, поэтому нам приходится с этим мириться.

3 голосов
/ 05 октября 2011

Пробовал выше и получал неожиданное поведение, пока я не использовал мод с 1000 как длинный.

int n = (int) (date.getTime() % 1000l);
return n<0 ? n+1000 : n;
1 голос
/ 02 сентября 2017

tl; dr

aDate.toInstant()
     .toEpochMilli()

java.time

Современный подход использует классы java.time.Они вытесняют проблемные старые унаследованные классы, такие как java.util.Date.

Instant instant = Instant.now();  // Capture current moment in UTC.

Извлеките количество миллисекунд с эпохи 1970-01-01T00:00:00Z.

long millis = instant.toEpochMilli() ;

Преобразование

Если вам передан объект java.util.Date, преобразуйте его в java.time.Вызовите новые методы, добавленные к старым классам.

Instant instant = myJavaUtilDate.toInstant() ;
long millis = instant.toEpochMilli() ;
...