Заметьте, я НЕ хочу миллис от эпохи. Мне нужно текущее количество миллисекунд на часах.
Так, например, у меня есть этот фрагмент кода.
Date date2 = new Date();
Long time2 = (long) (((((date2.getHours() * 60) + date2.getMinutes())* 60 ) + date2.getSeconds()) * 1000);
Есть ли способ получить миллисекунды с датой? Есть ли другой способ сделать это?
Примечание: System.currentTimeMillis()
дает мне миллисекунд эпохи, а это не то, что я ищу.
java
date
time
milliseconds
Lemonio
источник
источник
[0, 999]
, правильно? @thinksteep прочитал последнее предложение.java.util.Date
теперь унаследованные , вытеснены классами java.time .java.util.Date
теперь унаследованные , вытеснены классами java.time . См. Учебник Oracle .Ответы:
Ты имеешь ввиду?
Кстати, Windows не позволяет путешествовать во времени в 1969 г.
источник
c.get(Calendar.MILLISECOND)
не должно. Всегда думайте о крайних случаях!System.currentTimeMillis()
часовые пояса не влияют.Использовать календарь
или
На практике я думаю, что почти всегда будет равно System.currentTimeMillis ()% 1000; если у кого-то нет скачкообразных миллисекунд или какой-то календарь не определен с эпохой, не находящейся на второй границе.
источник
источник
ТЛ; др
Вы запрашиваете долю секунды от текущего времени как количество миллисекунд ( не считая от эпохи).
Посмотрите, как этот код запускается вживую на IdeOne.com .
Использование java.time
Современный способ - это классы java.time.
Захватите текущий момент в формате UTC.
Используйте этот
Instant.get
метод, чтобы узнать значение aTemporalField
. В нашем случаеTemporalField
мы хотимChronoField.MILLI_OF_SECOND
.Или посчитайте сами.
Скорее всего, вы спрашиваете об этом для определенного часового пояса. Доля секунды, вероятно, будет такой же, как и с,
Instant
но существует так много аномалий с часовыми поясами, что я не решаюсь делать это предположение.Допросите за доли секунды. В вопросе запрашиваются миллисекунды , но классы java.time используют более точное разрешение наносекунд . Это означает, что количество наносекунд будет варьироваться от 0 до 999 999 999.
Если вам действительно нужны миллисекунды, обрежьте более точные данные, разделив их на миллион. Например, полсекунды - это 500000000 наносекунд, а также 500 миллисекунд.
О java.time
Java.time каркас встроен в Java 8 и более поздних версий. Эти классы вытеснять неприятные старые устаревшие классы даты и времени , такие как
java.util.Date
,Calendar
, иSimpleDateFormat
.Проект Joda-Time , находящийся сейчас в режиме обслуживания , рекомендует перейти на классы java.time .
Чтобы узнать больше, см. Oracle Tutorial . И поищите в Stack Overflow множество примеров и объяснений. Спецификация - JSR 310 .
Где взять классы java.time?
Проект ThreeTen-Extra расширяет java.time дополнительными классами. Этот проект является испытательной площадкой для возможных будущих дополнений к java.time. Вы можете найти некоторые полезные классы здесь , такие как
Interval
,YearWeek
,YearQuarter
, и более .источник
Я пробовал несколько из вышеперечисленных, но они, кажется, сбрасывают @ 1000
Это определенно работает, и также следует учитывать год
а затем при необходимости сделайте то же самое для времени окончания.
источник
long timeNow = System.currentTimeMillis();
System.out.println(new Date(timeNow));
источник
Joda времени
Думаю, для этого можно использовать Joda-Time . Взгляните на
DateTime
класс и егоgetMillisOfSecond
метод. Что-то вродеисточник
getMillis()
имеет защищенный доступ»; нужно использоватьget()
вместо этого. Также обратите внимание, чтоnew DateTime(new Date())
это эквивалентно простому письмуnew DateTime()
.millisOfSecond
обращается к объекту, и последующий вызовget
извлекает примитивint
из этого объекта. Вы можете свернуть два вызова, используя удобный метод полученияgetMillisOfSecond
. Joda-Time следует этому шаблону во многих своих свойствах.В Java 8 вы можете просто сделать
источник
Instant.now().toEpochMilli()
Я провел тест с использованием java 8. Не имеет значения порядок, в котором построитель всегда занимает 0 миллисекунд, а конкатенация между 26 и 33 миллисекундами и итерация конкатенации 1000
Надеюсь, это поможет попробовать это с вашим идеалом
источник
Java 8:
источник
LocalDateTime
Класс не может представлять собой момент, не хватает какой - либо концепции временной зоны или офсетным из-UTC, и , следовательно , не может отслеживать эти проблемы часовых поясов.Вы можете использовать класс java.util.Calendar, чтобы получить время в миллисекундах. Пример:
источник