如何从Unix时间戳中提取小时?

时间:2019-01-16 03:45:14

标签: java mysql spring spring-data-jpa jpql

我正在使用Spring JPA。并且需要从begin_time BIGINT字段中提取小时。值看起来像这样

1547654400000    
1547568000000
1547654400000   

这是我尝试过的

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

但是它总是返回null。

Java有一个方法System.currentTimeMillis()。因此,在Spring JPA中必须有一种从UNIX时间戳中提取小时的方法。

如何从Unix时间戳中提取小时

2 个答案:

答案 0 :(得分:2)

如果beginTime是Unix时间戳,请尝试extract(hour from FROM_UNIXTIME(s.last_login) ), 希望我能帮助您。

答案 1 :(得分:2)

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

  1. 除以1000,以毫秒为单位,到“ unixtime”。
  2. 转换为时间格式。
  3. 提取所需的零件。 (这也可以通过MID()或其他字符串操作来完成。)

警告:这将获取与时区相关的“小时”,将其计入该值。

也许这就是您想要的:

另一方面,

FLOOR(1547654400000/(1000*3600))%24为您提供16,即值中的“小时”。

这样想:除以“小时”以下的部分(每小时的毫秒和秒),然后对每天的小时数取模(24)。