You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 06:42:31