IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

Linux date 命令获取某日期的前一天

星月轮转 2009-10-26 08:53:57 累计浏览 9,822 次
本机暂存

    最近需要写个 shell script,给定一个日期参数,它要得到该日期的前一天,然后做剩下的事。执行的时候就是这样:

以下是代码片段:
# ./foo.sh 2009-03-01

    初看,这个问题有些棘手。最原始的办法是写个比较繁琐的函数,知道每个月分别是多少天,还要处理一下闰年的情况――这也有点太繁琐了,呵呵。

    稍微看一下 date 命令,就发现利用它可以很方便的写出一个非常 stable 的函数。date 可以通过 -d 指定一个日期,然后用指定的格式输出。-d 不仅可以接受 “2009-03-01″ 或者 yesterday 这样的格式,还可以接受一个从 1970 年开始至今的秒数,当然也可以指定日期输出这样的秒数。如:

以下是代码片段:
# date +%s
1252591191
# date -d @1252591191 +%F
2009-09-10

    这样,事情就变得很简单了。先用 date 命令将该日期转换成秒数,减去一天的秒数 86400,然后再转化成正常易读的日期格式,就可以了,不需要考虑复杂的大小月以及闰年问题。以下是简单的例子:

以下是代码片段:
#!/bin/sh  
function get_day_before { 
seconds=`date -d $1 +%s` 
seconds_yesterday=$((seconds - 86400)) 
day_before=`date -d @$seconds_yesterday +%F` 
echo $day_before 
}  

get_day_before $1

    最后,必须支持一下这个 World Calendar。它非常有规律,非常容易记忆,季度、月份、星期完美地吻合在一起。

同分类推荐文章

  1. How to Set Up Homebrew Tap for Private CLI Tools: A Complete Guide (2026-05-27 02:13:03)
  2. WARNING: detected duplicate paths to the same disk导致crs无法正常启动故障解决 (2026-05-24 22:24:49)
  3. Terraform 极简入门:从 AWS-CLI 到基础设施即代码(IaC) (2026-05-20 08:00:00)

查看更多 DevOps 文章 →

建议继续学习

  1. Linux如何统计进程的CPU利用率 (累计阅读 16,202)
  2. 调试工具之GDB (累计阅读 14,760)
  3. 我的 RHCA 之路 (累计阅读 13,923)
  4. Linux内存点滴 用户进程内存空间 (累计阅读 13,041)
  5. 给程序员新手的一些建议 (累计阅读 13,022)
  6. Linux 性能监控、测试、优化工具 (累计阅读 12,942)
  7. 关于linux内存free的一些事情 (累计阅读 12,741)
  8. ps - 按进程消耗内存多少排序 (累计阅读 12,601)
  9. Google怎么用linux (累计阅读 12,460)
  10. find命令的一点注意事项 (累计阅读 11,781)