время с полуночи - PullRequest
       1

время с полуночи

2 голосов
/ 25 октября 2011

Я использую библиотеку Java, в которой есть метод, который требует информацию о времени. это описано так:

public void function(byte[] time);

время: время указывается в 1/100 секунды с полуночи в виде трехбайтового целого числа, начиная с самого старшего байта.

Я не знаю, как это сделать. Я могу получить время в milliseconds(Sysem.currentTimeInMillisecond). но это дает мне миллисекунды с 1 января 1970 года.

Кто-нибудь может помочь?

Ответы [ 3 ]

1 голос
/ 25 октября 2011

Вот код, который я только что написал.Я думаю, что это само собой объяснимо.Логика преобразования int в байтовый массив украдена из DataOutputStream.writeInt()

    Calendar c = Calendar.getInstance(); //now

    Calendar m = Calendar.getInstance(); //midnight
    m.set(Calendar.HOUR_OF_DAY, 0);
    m.set(Calendar.MINUTE, 0);
    m.set(Calendar.SECOND, 0);
    m.set(Calendar.MILLISECOND, 0);

    int diff = (int) (c.getTimeInMillis() - m.getTimeInMillis()) ;
    int v = diff / 10;

    byte[] bytes = new byte[4];
    bytes[0] = (byte) ((v >>> 24) & 0xFF);
    bytes[1] = (byte) ((v >>> 16) & 0xFF);
    bytes[2] = (byte) ((v >>>  8) & 0xFF);
    bytes[4] = (byte) ((v >>>  0) & 0xFF);
1 голос
/ 13 июня 2018

tl; dr

ZonedDateTime.now( 
    ZoneId.of( "Africa/Tunis" ) 
)
.get( ChronoField.MILLI_OF_DAY )  
/ 10L 

java.time

Современный подход использует классы java.time , которые вытеснили старые классы, вызывающие беспокойство, такие как Date & Calendar.

Часовой пояс имеет решающее значение при определении текущей даты и времени суток.

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

Получить первый момент этого дня.

ZonedDateTime startOfToday = now.toLocalDate().atStartOfDay( z ) ;

Рассчитать прошедшеевремя как Duration объект.

Duration d = Duration.between( startOfToday , now ) ;

Получите количество миллисекунд в этом общем промежутке времени.

long millis = d.toMillis() ;

Но вы хотите 1/100второй гранулярности, а не 1/1000 секунды, что составляет миллисекунды.Так что разделите на десять.

long countOfOneHundrethsOfASecondSinceStartOfDay = ( millis / 10L ) ;

Ярлык будет иметь доступ к полю MILLI_OF_DAY объекта ZonedDateTime, устраняя необходимость в начале дня.

ZonedDateTime now = ZonedDateTime.now( ZoneId.of( "Pacific/Auckland" ) ) ;
long millis = now.get( ChronoField.MILLI_OF_DAY ) ; 
long countOfOneHundrethsOfASecondSinceStartOfDay = ( millis / 10L ) ;

О java.time

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

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

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

Вы можете обмениваться java.time объектами напрямую с вашей базой данных.Используйте драйвер JDBC , совместимый с JDBC 4.2 или более поздней версии.Нет необходимости в строках, нет необходимости в java.sql.* классах.

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

  • Java SE 8 , Java SE 9 , Java SE 10, а позже
    • Встроенный.
    • Часть стандартного Java API с встроенной реализацией.
    • Java 9 добавляет некоторые незначительные функции и исправления.
  • Java SE 6 и Java SE 7
    • Большая часть функций java.time перенесена на Java 6 & 7 в ThreeTen-Backport .
  • Android
    • Более поздние версии реализации комплекта Android-классов java.time.
    • Для более ранних версий Android (<26) проект <a href="https://github.com/JakeWharton/ThreeTenABP" rel="nofollow noreferrer"> ThreeTenABP адаптируется ThreeTen-Backport (упомянуто выше).См. Как использовать ThreeTenABP… .

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

0 голосов
/ 25 октября 2011

Создайте григорианский календарь на данный момент. Клонируйте его и установите часы, минуты, секунды и миллисекунды на ноль. Получите миллисекунды от обоих и найдите разницу, затем конвертируйте в сотые доли.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...