日期时间常用格式化方法

  • 1 日期(+时间)→unix时间戳
  • 2 unix时间戳→日期、时间、日期+时间
  • 3 时间格式化
  • 4 毫秒的处理

日常工作中接触到的时间类型一般而言有4种,分别是:

  1. unix时间戳【从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒】:
    1595496374 (1单位1秒)
    1595496442071(一单位1ms,1ms=1/1000 s)
  2. 日期:2020-07-23
  3. 时间:17:30(.155)
  4. 日期+时间:2020-07-23 17:31:33(.155)

下面简单讲一些它们相互转化的方法,本文主要针对mysql语法,其他的语法可能会略有不同。
(ps:关于保留毫秒的做法,目前传统的函数不能一步到位,得根据具体情况具体分析,我会在最后讲这个情况,不过也只是提一下自己的想法~)

1 日期(+时间)→unix时间戳

常用的函数是unix_timestamp,可以传入1-2个参数:

  • 如果格式是为"yyyy-MM-dd HH:mm:ss"的日期,例如下面代码所示,则不需要传入额外的参数,函数会自动将其转化为对应的unix时间戳:
select unix_timestamp('2020-07-23 17:30:23')
  • 如果格式区别于以上,例如2020-07-232020/7/23或者少了一个秒的2020-07-23 17:30,都需要另外传入一个时间pattern,否则会输出NULL:
select unix_timestamp('2020-07-23','yyyy-MM-dd')
select unix_timestamp('2020-07-23 17:30','yyyy-MM-dd HH:mm')

2 unix时间戳→日期、时间、日期+时间

利用的是from_unixtime()函数,函数需要传入2个值,一个是unixtime时间戳,一个是时间pattern,也就是你要转化成的格式,这里 ‘yyyy-MM-dd’

SELECT from_unixtime(1595496623, 'yyyy-MM-dd')

如果需要进一步精确,可以一直精确到秒:

SELECT from_unixtime(1595496623, 'yyyy-MM-dd HH:mm:ss')

当然你也可以只输出时间,把前面的去掉即可:

SELECT from_unixtime(1595496623, 'HH:mm:ss')

需要注意的是:这里传入的必须是以秒为单位的unix时间戳而非毫秒为单位的时间戳

3 时间格式化

如果把时间看作是lego积木,那么第一部分我们其实是在拆解积木,第二部分我们是在搭积木,第三部分自然而然的就是,如何把一个拼好的积木A变成等价或者更粗略的积木B。
使用from_unixtime嵌套unix_timestamp函数我们便可以很快的进行时间格式化,例如我需要把20200723格式化成2020-07-23,可以用下面的代码:

from_unixtime(unix_timestamp('20200723','yyyyMMdd'),'yyyy-MM-dd')

不论怎么操作,基本逻辑都是先变成一个unix时间戳,然后把它变成需要的日期格式。
需要注意的是,上面一头一尾说的都是str格式的日期时间,不是date格式,如果需要转化成date格式,只需要再加一个to_date函数即可:

SELECT to_date('2020-07-23 17:30:23')

函数里面只需要包含yyyy-MM-dd即可,后面可有可无,但是前面不能是20200723或者2020/07/23一类的日期,这些会返回NULL。必须是yyyy-MM-dd形式

4 毫秒的处理

如果处理毫秒级的时间戳,具体需要先将毫秒时间戳转化成unix时间戳,具体方法很简单:可以在from_unixtime内嵌套一个cast函数或者floor函数,然后将时间戳除以1000即可:

SELECT from_unixtime(cast(1595502014839/1000 as bigint))
SELECT from_unixtime(floor(1595502014839/1000))

而对于将毫秒级时间戳变成标准日期格式加上毫秒后缀的形式,这里提供一种思路,即利用concat函数,先取出毫秒(839),然后和标准时间进行拼接,如果时间戳是字符串则可以用substring来切割,更加方便:

SELECT concat(from_unixtime(floor(1595502014839/1000)),
'.',
cast((1595502014839-floor(1595502014839/1000)*1000) as CHAR(3)))

SQL日期时间常用格式化方法相关推荐

  1. sql日期时间相减语句

    sql日期时间相减语句 本款教程利用了datediff函数,来对数据库教程的日期进行相减查询哦,下面便写了n种关于mssql 日期相减的方法. sql中两个日期相减 1.相差天数 select tru ...

  2. 日期时间脚本库方法列表

    /** 日期时间脚本库方法列表 Date.prototype.isLeapYear 判断闰年 Date.prototype.Format 日期格式化 Date.prototype.DateAdd 日期 ...

  3. java纪元时间_Java实现纪元秒和本地日期时间互换的方法【经典实例】

    Java实现纪元秒和本地日期时间互换的方法[经典实例] 发布时间:2020-09-07 22:58:35 来源:脚本之家 阅读:71 作者:FrankYou 本文实例讲述了Java实现纪元秒和本地日期 ...

  4. SQL日期时间转为字符串

    SQL日期时间转为字符串 SELECTCONVERT(varchar(100), GETDATE(), 0): 05 16 2006 10:57AM SELECTCONVERT(varchar(100 ...

  5. SQL日期时间不能早于1753年

    SQL日期时间不能早于1753年     1.公元元年的第一天,也就是公元1年1月1日,那天是星期六.     2. 现行的公历是格利戈里历法,这个历法并不是连续的,中间缺少了11天.1752年9月2 ...

  6. JAVA 日期时间类使用方法

    相关类 Date:  Date表示特定的瞬间,精确到毫秒,Date中的相应方法已废弃,从JDK 1.1开始,应该使用Calendar类实现日期和时间字段之间转换.  DateFormat:  Date ...

  7. C#日期时间的格式化输出

    文章目录 单个字母格式化 自定义格式化 DateTime被放在System命名空间下,在顶级语句中不必using可直接使. 单个字母格式化 DateTime最常用的属性是Now,表示当前的时刻,其数据 ...

  8. sql日期相关函数的使用方法

    sql查询当月,本天,本周的记录 2009-11-06 11:29 Sql代码 --查询当天: select * from info where DateDiff(dd,datetime,getdat ...

  9. oracle格式化列宽度,ORACLE日期时间的格式化参数大全

    经常遇到有朋友问询关于日期时间格式化的问题(或可以通过格式化轻易解决),经过参考Oracle SQL Reference官方文档,并附上详细的应用示例综合成文,希望能够对大家学习和使用有所帮助.本篇可 ...

最新文章

  1. php javascript wav波形绘制,PHP分析.wav文件并绘制png格式的波形图
  2. Json解析不允许子类父类变量重名的原因
  3. 第十七章 特殊成员_类的函数指针
  4. urlrewrite伪静态 及多参数传递-附正则表达式语法 [轉]
  5. 一卦,测一下我心里想的事
  6. .net SerialPort
  7. 计算机用户权限设置不了,电脑中怎样设置everyone权限
  8. 唏嘘!一代手机OS退场:没生态、没开发者是失败主因
  9. Spring Cloud与微服务学习总结(2)——Spring Cloud相较于Dubbo等RPC服务框架的优势
  10. 【代码+论文】基于自适应排序学习的个性化推荐方法
  11. body与html 会有间隙,css – thead和tbody之间的间距
  12. 计步器锁屏后依然工作的原理
  13. mining.subscribe与initiate_stratum函数
  14. PPTP(Point to Point Tunneling Protocol),即点对点隧道协议。
  15. 软件测试工程师笔试题
  16. python七段数码管10秒倒计时_用7段数码管显示9秒倒计时.doc
  17. Edge浏览器打开新建标签页速度很慢?如何解决?
  18. 定时闹钟课程设计c语言,基于单片机89c52定时闹钟的课程设计.pdf
  19. css取消a标签自动换行,css中a元素放长英文字母或者数字自动换行的解决
  20. html、js实现facebook、twitter分享

热门文章

  1. Vue过滤器:第二天
  2. IDEA 配置Go环境,编写Golang代码,学习笔记(一)
  3. 演讲实录丨徐宗本院士:如何突破机器学习的先验假设?
  4. 洛谷P1367 蚂蚁
  5. Windows位图文件格式[转]
  6. Windows系统设置定时任务
  7. CCF认证2019031-小中大
  8. c8815语言,华为C8815强刷教程(可救砖用)
  9. 第三章 软件需求分析
  10. 充电宝哪个品牌的更实用更安全?安全的充电宝推荐