如何在Shell中格式化并打印当前日期时间 - jbranchaud/til项目技巧

如何在Shell中格式化并打印当前日期时间 - jbranchaud/til项目技巧

til :memo: Today I Learned til 项目地址: https://gitcode.com/gh_mirrors/ti/til

日期时间基础命令

在Shell环境中,date命令是最常用的日期时间处理工具。默认情况下,直接运行date命令会输出完整的系统日期和时间信息:

$ date
Fri Jan 22 13:45:44 CST 2021

这种格式包含了星期、月份、日期、时间、时区和年份信息。虽然完整,但在实际应用中,我们往往需要更简洁或特定格式的日期时间表示。

格式化日期时间输出

date命令的强大之处在于它支持自定义输出格式。通过+参数后跟格式字符串,可以灵活控制输出内容:

$ date +"%Y/%m/%d %H:%M:%S"
2021/01/22 13:47:55

这个例子中,我们使用了以下格式控制符:

  • %Y:四位数的年份(如2021)
  • %m:两位数的月份(01-12)
  • %d:两位数的日期(01-31)
  • %H:24小时制的小时(00-23)
  • %M:分钟(00-59)
  • %S:秒(00-60)

常用格式控制符

除了上述基本格式外,date命令还支持多种格式控制符:

  1. 日期相关

    • %a:缩写的星期名(如Mon)
    • %A:完整的星期名(如Monday)
    • %b:缩写的月份名(如Jan)
    • %B:完整的月份名(如January)
    • %d:月份中的第几天(01-31)
    • %j:一年中的第几天(001-366)
    • %u:星期几(1-7,1表示星期一)
  2. 时间相关

    • %I:12小时制的小时(01-12)
    • %p:AM或PM
    • %T:时间(等价于%H:%M:%S)
    • %s:自1970-01-01 00:00:00 UTC以来的秒数(时间戳)
  3. 其他

    • %Z:时区缩写(如CST)
    • %%:百分号本身

实用函数封装

在实际脚本开发中,我们经常需要重复使用特定格式的日期时间。可以将其封装为函数提高代码复用性:

now() {
  echo "当前时间: $(date +'%Y/%m/%d %H:%M:%S')"
}

调用这个函数时,会输出格式化的当前时间:

$ now
当前时间: 2023/07/15 14:30:22

进阶应用示例

  1. 生成时间戳

    timestamp() {
      date +"%Y%m%d%H%M%S"
    }
    
  2. 日志时间格式

    log_time() {
      date +"[%Y-%m-%d %H:%M:%S]"
    }
    
  3. 文件备份命名

    backup_name() {
      echo "backup_$(date +%Y%m%d).tar.gz"
    }
    

时区处理技巧

如果需要处理不同时区的时间,可以使用TZ环境变量临时改变时区:

$ TZ=Asia/Shanghai date
2023年07月15日 星期六 22:30:00 CST

日期计算

date命令还支持日期的加减计算:

# 明天的日期
$ date -d "tomorrow" +%Y-%m-%d

# 一周后的日期
$ date -d "next week" +%Y-%m-%d

# 10天后的日期
$ date -d "10 days" +%Y-%m-%d

总结

掌握date命令的格式化技巧可以极大提升Shell脚本处理日期时间的能力。无论是简单的日志记录,还是复杂的定时任务,合理的日期时间格式都能让脚本更加清晰可靠。建议读者根据实际需求,创建自己的日期时间工具函数库,提高开发效率。

til :memo: Today I Learned til 项目地址: https://gitcode.com/gh_mirrors/ti/til

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

叶彩曼Darcy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值