Как я могу получить количество миллисекунд, прошедших с полуночи текущего?
обратите внимание, я не хочу Миллис из эпохи. Я хочу, чтобы количество миллисекунд в настоящее время на часы.
Так, например, у меня есть этот бит кода.
Date date2 = new Date();
Long time2 = (long) (((((date2.getHours() * 60) + date2.getMinutes())* 60 ) + date2.getSeconds()) * 1000);
есть ли способ получить миллисекунды с датой? Есть ли другой способ сделать это?
Примечание:System.currentTimeMillis()
дает мне Миллис из эпохи, которая не то, что я ищу.
9 ответов:
Вы имеете в виду?
long millis = System.currentTimeMillis() % 1000;
кстати, Windows не позволит путешествие по 1969 годы
C:\> date Enter the new date: (dd-mm-yy) 2/8/1969 The system cannot accept the date entered.
Календарь
Calendar.getInstance().get(Calendar.MILLISECOND);
или
Calendar c=Calendar.getInstance(); c.setTime(new Date()); /* whatever*/ //c.setTimeZone(...); if necessary c.get(Calendar.MILLISECOND);
на практике, хотя я думаю, что это будет почти всегда равная система.currentTimeMillis ()%1000; если у кого-то нет скачка-миллисекунд или какой-то календарь определен с эпохой не на второй границе.
я попробовал несколько выше, но они, кажется, сбросить @ 1000
этот определенно работает, и также должен учитывать год
long millisStart = Calendar.getInstance().getTimeInMillis();
и затем сделать то же самое для времени окончания, если это необходимо.
tl; dr
вы просите долю секунды текущего времени в виде числа миллисекунд (не отсчет от эпохи).
Instant.now() // Get current moment in UTC, then… .get( ChronoField.MILLI_OF_SECOND ) // interrogate a `TemporalField`.
2017-04-25T03: 01: 14.113 Z →
113
- получить долю секунды в наносекундах (миллиарды).
- разделить на тысячу, чтобы усечь до миллисекунд (тысяч).
посмотреть этот запустить код видео на IdeOne.com.
использование java.время
современный способ с java.время занятий.
захват текущего момента в UTC.
Instant.now()
использовать
Instant.get
метод для опроса значения aTemporalField
. В нашем случаеTemporalField
мы хотимChronoField.MILLI_OF_SECOND
.int millis = Instant.now().get( ChronoField.MILLI_OF_SECOND ) ; // Get current moment in UTC, then interrogate a `TemporalField`.
или сделать математику самостоятельно.
скорее всего, вы просите это для определенного часового пояса. Этот доля секунды, скорее всего, будет такой же, как и с
Instant
но есть так много аномалий с часовыми поясами, я не решаюсь сделать это предположение.ZonedDateTime zdt = ZonedDateTime.now( ZoneId.of( "America/Montreal" ) ) ;
опросите за долю секунды. Вопрос, заданный для МС, но java.классы времени используют более тонкое разрешение наносекунд. Это означает, что количество наносекунд будет варьироваться от 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.время
The java.время фреймворк встроен в Java 8 и более поздние версии. Эти классы вытесняют беспокойных старых наследие классы даты и времени, такие как
java.util.Date
,Calendar
,&SimpleDateFormat
.в Joda-Time, теперь режим обслуживания, советует миграция в java.время классы.
чтобы узнать больше, смотрите Учебник Oracle. Поиск переполнения стека для многих примеров и объяснений. Спецификация является JSR 310.
где получить java.время занятий?
- Java SE 8 и SE 9 и позже
- встроенный.
- часть стандартного Java API с комплектной реализацией.
- Java 9 добавляет некоторые незначительные функции и исправления.
- Java SE 6 и SE 7
- большая часть java.функциональность время портированы с Java 6 и 7 в ThreeTen-Backport.
- Android
- The ThreeTenABP проект приспосабливается ThreeTen-Backport (упоминалось выше) специально для Android.
- посмотреть как использовать ThreeTenABP....
в ThreeTen-Extra проект расширяет java.время с дополнительными занятиями. Этот проект является испытательным полигоном для возможных будущих дополнений к java.время. Вы можете найти некоторые полезные классы, такие как
Interval
,YearWeek
,YearQuarter
и больше.
long timeNow = System.currentTimeMillis();
System.out.println(new Date(timeNow));
Пт апр 04 14: 27: 05 PDT 2014
Joda Времени
Я думаю, что вы можете использовать Joda Времени для этого. Взгляните на
DateTime
класса и егоgetMillisOfSecond
метод. Что-то вродеint ms = new DateTime().getMillisOfSecond() ;
в Java 8, вы можете просто сделать
ZonedDateTime.now().toInstant().toEpochMilli()
возвращает : количество миллисекунд с эпохи 1970-01-01T00:00: 00Z
Я сделал тест с помощью java 8 Это не имеет значения порядок строитель всегда занимает 0 миллисекунд и конкат между 26 и 33 миллисекундами под и итерации 1000 конкатенации
надеюсь, что это поможет попробовать его с вашей ide
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)); }