Как получить текущие миллисекунды с текущего времени - программирование
Подтвердить что ты не робот

Как получить текущие миллисекунды с текущего времени

Заметьте, я не хочу миллисов от эпохи. Я хочу, чтобы количество миллисекунд в настоящее время было на часах.

Так, например, у меня есть этот бит кода.

Date date2 = new Date(); 
Long time2 = (long) (((((date2.getHours() * 60) + date2.getMinutes())* 60 ) + date2.getSeconds()) * 1000);

Есть ли способ получить миллисекунды с датой? Есть ли другой способ сделать это?

Примечание: System.currentTimeMillis() дает мне миллис от эпохи, чего я не ищу.

4b9b3361

Ответ 1

Вы имеете в виду?

long millis = System.currentTimeMillis() % 1000;

BTW Windows не позволяет использовать timetravel до 1969

C:\> date
Enter the new date: (dd-mm-yy) 2/8/1969
The system cannot accept the date entered.

Ответ 2

Использовать Календарь

Calendar.getInstance().get(Calendar.MILLISECOND);

или

Calendar c=Calendar.getInstance();
c.setTime(new Date()); /* whatever*/
//c.setTimeZone(...); if necessary
c.get(Calendar.MILLISECOND);

На практике, хотя я думаю, что он почти всегда будет равен System.currentTimeMillis()% 1000; если у кого-то есть скачок-миллисекунды или какой-то календарь определен с эпохой, а не на второй границе.

Ответ 3

Calendar.getInstance().get(Calendar.MILLISECOND);

Ответ 4

Я попробовал несколько выше, но они выглядят как reset @1000

Этот человек определенно работает, а также должен учитывать год

long millisStart = Calendar.getInstance().getTimeInMillis();

а затем сделать то же самое для конечного времени, если это необходимо.

Ответ 5

  • long timeNow = System.currentTimeMillis();
  • System.out.println(new Date(timeNow));

Пт Апр 04 14:27:05 PDT 2014

Ответ 6

Joda времени

Я думаю, вы можете использовать Joda-Time для этого. Взгляните на класс DateTime и его getMillisOfSecond. Что-то вроде

int ms = new DateTime().getMillisOfSecond() ;

Ответ 7

TL;DR

Вы запрашиваете долю секунды текущего времени как количество миллисекунд (не считая с эпохи).

long millis = ( Instant.now().getNano() / 1_000_000L ) ;

2017-04-25T03: 01:14.113Z → 113

  • Получите дробную секунду в наносекундах (миллиарды).
  • Разделите на тысячу до усечения до миллисекунд (в тысячах).

Смотрите этот запуск кода на IdeOne.com.

Использование java.time

Современный способ - это классы java.time.

Захват текущего момента в UTC.

Instant.now()

Скорее всего, вы просите об этом для определенного часового пояса. Доля секунды, вероятно, будет такой же, как с Instant, но существует так много аномалий с часовыми поясами, я стесняюсь сделать это предположение.

ZonedDateTime zdt = ZonedDateTime.now( ZoneId.of( "America/Montreal" ) ) ;

Опросить дробную секунду. Вопрос задал миллисекунды, но классы java.time используют более точное разрешение наносекунд. Это означает, что число наносекунд будет варьироваться от 0 до 999 999 999.

long nanosFractionOfSecond = zdt.getNano();

Если вы действительно хотите миллисекунды, обрезайте более тонкие данные, разделив их на миллион. Например, половина секунды составляет 500 000 000 наносекунд, а также составляет 500 миллисекунд.

long millis = ( nanosFractionOfSecond / 1_000_000L ) ;  // Truncate nanoseconds to milliseconds, by a factor of one million.

О java.time

Структура java.time встроена в Java 8 и более поздних версий. Эти классы вытесняют неприятный старый legacy классы даты-времени, такие как java.util.Date, Calendar и SimpleDateFormat.

Проект Joda-Time, теперь режим обслуживания, советуем перейти к классам java.time.

Чтобы узнать больше, см. Учебник Oracle. И поиск Qaru для многих примеров и объяснений. Спецификация JSR 310.

Где получить классы java.time?

  • Java SE 8 и SE 9 и позже
    • Встроенный.
    • Часть стандартного Java API с объединенной реализацией.
    • Java 9 добавляет некоторые незначительные функции и исправления.
  • Java SE 6 и SE 7
    • Большая часть функций java.time возвращается на Java 6 и 7 в ThreeTen-Backport.
  • Android

Проект ThreeTen-Extra расширяет java.time с дополнительными классами. Этот проект является доказательством возможных будущих дополнений к java.time. Здесь вы можете найти полезные классы, такие как Interval, YearWeek, YearQuarter и больше.

Ответ 8

В Java 8 вы можете просто сделать

ZonedDateTime.now().toInstant().toEpochMilli()

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

Ответ 9

Я проверил с помощью java 8 Это не имеет значения, когда строитель всегда занимает 0 миллисекунд, а concat - между 26 и 33 миллисекундами и итерацией 1000 конкатенаций

Надеюсь, что это поможет попробовать с идеей

public void count() {

        String result = "";

        StringBuilder builder = new StringBuilder();

        long millis1 = System.currentTimeMillis(),
            millis2;

        for (int i = 0; i < 1000; i++) {
            builder.append("hello world this is the concat vs builder test enjoy");
        }

        millis2 = System.currentTimeMillis();

        System.out.println("Diff: " + (millis2 - millis1));

        millis1 = System.currentTimeMillis();

        for (int i = 0; i < 1000; i++) {
            result += "hello world this is the concat vs builder test enjoy";
        }

        millis2 = System.currentTimeMillis();

        System.out.println("Diff: " + (millis2 - millis1));
    }