You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何构造date命令-d选项的输入字符串以获取时分格式输出

解决bash中date命令-d选项的输入日期格式问题

别担心,我完全懂你的困扰——date命令的手册页确实对输入格式的说明藏得比较深,而且多数搜索结果都只盯着输出格式讲。下面我把-d(或--date)选项支持的实用输入格式整理出来,结合你要的+%H%M输出给你举例子:

最推荐:ISO 8601格式(完全无歧义)

这是跨系统兼容性最好的格式,根本不会出现日期顺序搞混的问题:

  • 带分隔符的完整格式:YYYY-MM-DD HH:MM:SS
    示例命令:
    date -d "2024-05-20 14:30:00" +%H%M
    # 输出:1430
    
  • 紧凑无分隔符格式:YYYYMMDDHHMMSS
    示例命令:
    date -d "20240520143000" +%H%M
    # 输出:1430
    
    甚至可以省略秒数,直接传YYYY-MM-DD HH:MM也能正常解析。

灵活好用:自然语言风格输入

date命令支持非常人性化的口语化时间字符串,适合处理相对日期或模糊时间:

  • 示例1:指定过去/未来的时间点
    date -d "last Friday 3:45pm" +%H%M
    # 输出对应周五下午3点45分的小时分钟,比如1545
    date -d "2 days ago 10:00" +%H%M
    # 输出两天前上午10点的1000
    
  • 示例2:仅指定时间(默认用当前日期)
    date -d "08:15" +%H%M
    # 输出:0815
    

区域化格式(注意歧义)

如果习惯用本地日期格式,比如美式MM/DD/YYYY或欧式DD/MM/YYYY也可以用,但要注意日期顺序的歧义(比如03/04/2024可能被识别为3月4日或4月3日,取决于系统locale设置):

  • 美式格式示例:
    date -d "05/20/2024 09:15" +%H%M
    # 输出:0915
    
  • 欧式格式示例(需系统locale支持日在前的解析):
    date -d "20/05/2024 09:15" +%H%M
    # 输出:0915
    

特殊场景:Unix时间戳输入

如果你手里有Unix时间戳(从1970-01-01 00:00:00 UTC开始的秒数),可以用@前缀传入:

date -d @1716205800 +%H%M
# 该时间戳对应2024-05-20 14:30:00 UTC,输出会根据你的系统时区转换,比如东八区会输出2230

排查小技巧

要是碰到invalid date错误,先去掉输出格式,直接运行date -d "你的日期字符串",看能不能正常输出完整的日期时间。如果可以,再加+%H%M就没问题;如果不行,说明输入格式不被识别,换上面的格式试试就好。

内容的提问来源于stack exchange,提问作者ClimateUnboxed

火山引擎 最新活动