format问题注意:
1.yyyy-MM-dd HH:mm:ss是Java中的日期格式。
H的大小写代表24小时制和12小时制
2.oracle中的日期格式为:
24小时制:yyyy-MM-dd HH24:mi:ss12小时制:yyyy-MM-dd HH:mi:ss
3.hivesql中使用的是yyyy-MM-dd HH:mm:ss格式。
4.mysql中使用的是'%Y-%m-%d %H:%i:%S'格式。
格式化日期时间
将日期/时间戳/字符串转换为日期格式 FMT 指定格式的字符串值
语法: DATE_FORMAT(date,format)
- select DATE_FORMAT('2022-07-05 14:01:35','%Y-%m-%d %H:00:00') ;
-
- //mysql输出结果 '2022-07-05 14:00:00'
时间戳数字>>>>日期
将时间戳转数字转为特定格式的字符串
语法:from_unixtime(int类型的秒值,format) 不指定格式输出为默认格式
如果输入的int为毫秒,需要先转换为秒,使用cast(值 as int)
- select from_unixtime(cast(1553184000488/1000 as int),'yyyy-MM-dd HH:mm:ss')
-
- //hql输出结果 2019-03-22 00:00:00
-
- select FROM_UNIXTIME(1459338786)
- select FROM_UNIXTIME(1459338786,'%Y-%m-%d %H:%i:%s')
-
- //mysql输出结果 2016-03-30 19:53:06
日期>>>>时间戳数字
语法:unix_timestamp() 返回当前时间的时间戳
hql中还有一个特有的用法:unix_timestamp(date,format)
date 必须满足了 format的表达式才能返回相应的时间戳秒级数字
- select UNIX_TIMESTAMP()
- //mysql输出结果 1657007384
-
- select unix_timestamp("2029-05-20","yyyy-MM-dd");
- //hql输出结果 1653004800
日期>>>>时间戳数字
根据你所提供的字符串格式(在这里是’dd/MMM/yyy:HH:mm:ss Z’)将日期字符串格式化。
语法:to_unix_timestamp(date,format)
- select to_unix_timestamp('16/Mar/2017:12:25:01','dd/MMM/yyy:HH:mm:ss')
- //hql输出结果 1489667101
返回查询计算开始时的当前时间戳,没有参数
和mysql中的now()和sysdate()函数作用相同
hql可以通过转换类型得到毫秒值 cast(参数 as int)
这个函数的输出是正常时间,相对于 unix_timestamp 来说 快 8 小时。
- select CURRENT_TIMESTAMP()
- //mysql输出结果 2022-07-05 15:31:11 返回了当前时间
-
- select cast(current_timestamp() as int)
- //hql中输出结果将当前时间转换成了秒 1651751854
总结:按照指定格式获取当前时间的固定搭配有两个
select from_unixtime(unix_timestamp(),"yyyy-MM-dd HH:mm:ss"), date_format(current_timestamp(),"yyyy-MM-dd HH:mm:ss");
但是 1 比 2 总体慢 8 小时,所以推荐大家使用 2,尽量弃用官方声明的过时函数;