Вопрос

Мне нужна функция, такая как Long GetMillis (дата Adate);

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

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

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

Это было полезно?

Решение

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

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

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

Другие советы

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

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

TL; DR

aDate.toInstant()
     .toEpochMilli()

Java.time

Современный подход использует классы Java.Time. Они вытесняют неприятные старые классы Legacy, такие как 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() ;
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top