Как извлечь час из временной метки unix?

Я использую Spring JPA. И нужно извлечь час из поля begin_timeBIGINT. Значения выглядят так

1547654400000    
1547568000000
1547654400000   

Вот что я пробовал

 @Query("select extract(hour from (s.beginTime/1000)) from TestTable s") 
 public List<Integer> testQuery() { 
 // implementation 
 }  

Но он всегда возвращает ноль.

В Java есть метод System.currentTimeMillis (). Следовательно, в Spring JPA должен быть метод для извлечения часа из временной метки unix.

Как извлечь час из временной метки unix

Можете ли вы добавить полный код класса, в котором используется метод testQuery?

Jonathan JOhx 16.01.2019 05:46

Это не JPQL, который вы публикуете, поэтому он все равно не сработает (если у вас нет секретного флага nativeQuery, установленного в другом месте)

user3973283 16.01.2019 08:36
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
2 982
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

если beginTime - это временная метка unix, попробуйте extract(hour from FROM_UNIXTIME(s.last_login) ), надеюсь, я смогу вам помочь.

HOUR(FROM_UNIXTIME(1547654400000/1000)) -> 8

  1. Разделите на 1000, чтобы получить от миллисекунд до «unixtime».
  2. Преобразование в формат времени.
  3. Извлеките нужную деталь. (Это также можно сделать с помощью MID() или других строковых манипуляций.)

Внимание: это позволит получить «час», связанный с любым часовым поясом, запеченным в значении.

Возможно, это то, что вы хотели:

FLOOR(1547654400000/(1000*3600))%24, с другой стороны, дает вам 16, «час», который находится в значении.

Подумайте об этом так: разделите на части ниже «часа» (миллисекунды и секунды в час), затем перейдите по модулю количества часов в день (24).

Другие вопросы по теме