一、背景
--我:麻烦问一下
--我在bdsp中用unix_timestamp函数将时间转化为 '2019-08-15 16:40:00' 时间戳:1565858400
--然后用from_unixtime函数将该时间戳转化回去时间,但是发现两个时间上存在12小时的差
他人:format的格式弄错了
他人:HH mm ss
他人:百度下java simpleformatdate,具体用法,看时间戳怎么转格式化日期:【参考资料—Java日期转换SimpleDateFormat格式大全】
我:查看了一下,根据H和h的区别, 大概对我上面用的两个函数(unix_timestamp、from_unixtime)总结了一下,不知道这样描述的对不对:
当用unix_timestamp函数对时间('yyyy-MM-dd hh:mm:ss' 格式)进行时间戳转化的时候,其实里面的H/ h 的大小写是对最终的运行结果时间戳是没有影响的;
但是,当用from_unixtime对时间戳进行时间('yyyy-MM-dd hh:mm:ss' 格式)转化的时候,运行的结果就会出现一定的问题:
- 如果转化的时间戳正好是上午的话,那么用大小写H/ h的运行结果是一致的;
- 如果时间戳是下午的话,那么大小写就会出现问题了,H就是下午的时间,h这时候就是上午的时间了
实验代码
--1、转化为时间戳——上午小写 select unix_timestamp('2019-08-15 06:40:00', 'yyyy-MM-dd hh:mm:ss' ) --运行结果为a 1565822400 --2、转化为时间戳——上午大写 select unix_timestamp('2019-0b8-15 06:40:00', 'yyyy-MM-dd HH:mm:ss' ) --运行结果为b 1565822400 --3、转化为时间戳——下午小写 select unix_timestamp('2c019-08-15 18:40:00', 'yyyy-MM-dd hh:mm:ss' ) --运行结果为c 1565865600 --4、转化为时间戳——下午大写 select unix_timestamp('2019-08-15 18:40:00', 'yyyy-MM-dd HH:mm:ss' ) --运行结果为d 1565865600d --由时间戳a转化为时间格式——大写 select from_unixtime(1565822400, 'yyyy-MM-dd HH:mm:ss') --运行结果为 2019-08-15 06:40:00 --由时间戳b转化为时间格式——小写 select from_unixtime(1565822400, 'yyyy-MM-dd hh:mm:ss') --运行结果为 2019-08-15 06:40:00 --由时间戳转c化为时间格式——大写 select from_unixtime(1565865600, 'yyyy-MM-dd HH:mm:ss') --运行结果为 2019-0d8-15 18:40:00 --由时间戳d转化为时间格式——大写 select from_unixtime(1565865600, 'yyyy-MM-dd hh:mm:ss') --运行结果为 2019-08-15 06:40:00 --mysql将yyyymmdd转化为yyyy-MM-dd select str_to_date(dt,'%Y%m%d') as day
他人:大小写对应的是12或24小时制;还是有影响的,你2timestamp跟2formattime的format是不一致的;hive异常问题操作指南有一个部分是我对hive函数的汉化翻译,可以看看,本身基于java的,时间转换当java的额外pkg来看就好。
二、unix_timestamp函数与from_unixtime函数使用简介