getMilliseconds () из Java Date
-
13-10-2019 - |
Вопрос
Мне нужна функция, такая как 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() ;