如何构造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 # 输出:1430YYYY-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




