Shell中实现Oracle trunc(sysdate)等效功能:将日期截断至午夜转秒数
Shell 中实现 Oracle
trunc(sysdate) 等效功能的方法 当然有啦!在Shell环境下,完全可以实现和Oracle trunc(sysdate) 一模一样的效果——把指定日期(或当前日期)截断到当天午夜(00:00:00),再转换成Unix时间戳(秒数)。下面给你分享几个常用的、适配不同系统的方案:
针对大部分Linux系统(GNU Date)
GNU版本的date命令功能很强,有几种简洁的写法:
- 方法1:分步截断再转秒
先提取当前日期的年月日,再将其解析为当天午夜的时间,最后输出秒数:date -d "$(date +%Y-%m-%d)" +%s - 方法2:直接用内置参数
GNU date支持today关键字,直接指向当天午夜,一步到位:date +%s -d today - 处理指定日期字符串
如果要处理像2018-05-25 13:30:30这样的自定义时间,只需提取日期部分再转换:# 先提取日期部分,再转成午夜的秒数 date -d "$(echo '2018-05-25 13:30:30' | cut -d' ' -f1)" +%s # 或者直接构造午夜时间字符串 date -d "2018-05-25 00:00:00" +%s
针对macOS/BSD系统(BSD Date)
BSD版本的date命令参数和GNU有点区别,推荐这两种写法:
- 方法1:重置时分秒到0
通过-v参数直接把当前时间的小时、分钟、秒都设为0,再输出秒数:date -v0H -v0M -v0S +%s - 方法2:解析日期字符串
如果要处理自定义时间,先提取日期部分,再用-j(不修改系统时间)参数解析并转换:# 处理指定的2018-05-25 13:30:30 date -j -f "%Y-%m-%d" "$(echo '2018-05-25 13:30:30' | cut -d' ' -f1)" +%s
验证结果
不管用哪种方法,最终输出的都是当天午夜对应的Unix时间戳,比如针对2018-05-25,输出应该是1527206400(这个值是UTC时区的午夜,如果你用的是本地时区,结果会对应本地午夜的秒数,和Oracle的trunc(sysdate)逻辑一致)。
内容的提问来源于stack exchange,提问作者FlorentinaP
相关产品推荐
相关产品推荐

