{"msg":"操作成功","code":200,"data":{"createBy":"admin","createTime":"2024-07-16 13:24:22","updateBy":"admin","updateTime":"2024-07-16 13:24:22","remark":null,"id":84,"articleTitle":"每天一个Linux命令（八）date","articleUrl":"linux_date","articleThumbnail":"https://www.asumimoe.com/imgfiles/20250301/b95d839fa195428cb42fc7f104f50b0d.png","articleFlag":"0","draftStatus":"1","reprintStatement":"0","articleSummary":"date是 Linux/Unix 系统中用于显示或设置系统日期和时间的命令，支持格式化输出、计算日期、转换时间戳等功能。它是日常操作和脚本编写中常用的基础命令之一。","articleContent":"`date` 是 Linux/Unix 系统中用于**显示或设置系统日期和时间**的命令，支持格式化输出、计算日期、转换时间戳等功能。它是日常操作和脚本编写中常用的基础命令之一。\n\n---\n\n## 语法\n\n```bash\ndate [选项] [+格式]\n```\n\n---\n\n## 常用选项\n\n| 选项 | 说明                                 |\n| ---- | ------------------------------------ |\n| `-d` | 显示指定日期/时间（支持相对时间）    |\n| `-s` | 设置系统日期/时间（需 root 权限）    |\n| `-u` | 显示或设置 UTC 时间                  |\n| `-R` | 输出 RFC 2822 格式的日期（如邮件头） |\n| `-I` | 输出 ISO 8601 格式的日期             |\n\n---\n\n## 格式化符号\n\n| 符号 | 说明                               |\n| ---- | ---------------------------------- |\n| `%Y` | 年份（四位数）                     |\n| `%m` | 月份（01-12）                      |\n| `%d` | 日（01-31）                        |\n| `%H` | 小时（00-23）                      |\n| `%M` | 分钟（00-59）                      |\n| `%S` | 秒（00-59）                        |\n| `%A` | 星期全称（如 Monday）              |\n| `%a` | 星期缩写（如 Mon）                 |\n| `%B` | 月份全称（如 January）             |\n| `%b` | 月份缩写（如 Jan）                 |\n| `%T` | 时间（等价于 `%H:%M:%S`）          |\n| `%F` | 日期（等价于 `%Y-%m-%d`）          |\n| `%s` | 时间戳（从 1970-01-01 开始的秒数） |\n\n---\n\n## 使用示例\n\n### 1. 显示当前日期和时间\n\n```bash\ndate\n```\n\n输出示例：\n\n```bash\nWed Jan 10 15:30:45 UTC 2024\n```\n\n---\n\n### 2. 格式化输出日期\n\n```bash\ndate +\"%Y-%m-%d %H:%M:%S\"\ndate +\"%F %T\"\n```\n\n输出示例：\n\n```bash\n2024-01-10 15:30:45\n```\n\n---\n\n### 3. 显示当前时间戳\n\n```bash\ndate +%s\n```\n\n输出示例：\n\n```bash\n1704900645\n```\n\n---\n\n### 4. 将时间戳转换为日期\n\n```bash\ndate -d @1704900645\n```\n\n输出示例：\n\n```bash\nWed Jan 10 15:30:45 UTC 2024\n```\n\n---\n\n### 5. 显示 UTC 时间\n\n```bash\ndate -u\n```\n\n输出示例：\n\n```bash\nWed Jan 10 15:30:45 UTC 2024\n```\n\n---\n\n### 6. 显示相对时间\n\n```bash\ndate -d \"next Friday\"\n```\n\n输出示例：\n\n```bash\nFri Jan 12 00:00:00 UTC 2024\n```\n\n---\n\n### 7. 计算未来或过去的日期\n\n```bash\ndate -d \"3 days ago\"\ndate -d \"2 weeks\"\n```\n\n输出示例：\n\n```bash\nMon Jan  7 15:30:45 UTC 2024\nWed Jan 24 15:30:45 UTC 2024\n```\n\n---\n\n### 8. 设置系统时间（需 root 权限）\n\n```bash\nsudo date -s \"2024-01-10 15:30:45\"\n```\n\n---\n\n## 注意事项\n\n1. **权限问题**：设置系统时间需 root 权限\n2. **时区影响**：默认输出为本地时间，可通过 `TZ` 环境变量指定时区\n3. **格式化符号**：区分大小写，如 `%Y` 和 `%y` 不同\n\n---\n\n## 常见错误处理\n\n### 错误示例：无效日期格式\n\n```bash\ndate -s \"2024/01/10\"\n# 输出：date: invalid date '2024/01/10'\n```\n\n### 错误示例：权限不足\n\n```bash\ndate -s \"2024-01-10 15:30:45\"\n# 输出：date: cannot set date: Operation not permitted\n```\n\n---\n\n## 进阶技巧\n\n### 1. 显示特定时区的时间\n\n```bash\nTZ=\"Asia/Shanghai\" date\n```\n\n输出示例：\n\n```bash\nThu Jan 11 00:30:45 CST 2024\n```\n\n---\n\n### 2. 计算脚本执行时间\n\n```bash\nstart=$(date +%s)\nsleep 5\nend=$(date +%s)\necho \"Elapsed time: $((end - start)) seconds\"\n```\n\n输出：\n\n```bash\nElapsed time: 5 seconds\n```\n\n---\n\n### 3. 生成日志文件名\n\n```bash\nlogfile=\"app_$(date +%Y%m%d_%H%M%S).log\"\necho $logfile\n```\n\n输出示例：\n\n```bash\napp_20240110_153045.log\n```\n\n---\n\n### 4. 显示上个月的最后一天\n\n```bash\ndate -d \"$(date +%Y-%m-01) -1 day\"\n```\n\n输出示例：\n\n```bash\nTue Dec 31 00:00:00 UTC 2024\n```\n\n---\n\n### 5. 显示当前季度的第一天\n\n```bash\ndate -d \"$(date +%Y-%m-01) -$(($(date +%-m -d \"$(date +%Y-%m-01)\") % 3)) months\"\n```\n\n输出示例：\n\n```bash\nMon Oct  1 00:00:00 UTC 2024\n```\n\n---\n\n### 6. 结合 `cron` 定时任务\n\n```bash\n# 每天 8:00 执行脚本\n0 8 * * * /path/to/script.sh\n```\n\n---\n\n### 7. 生成 ISO 8601 格式时间\n\n```bash\ndate -Iseconds\n```\n\n输出示例：\n\n```bash\n2024-01-10T15:30:45+00:00\n```","categoryId":1,"viewCount":55,"categoryName":"Linux","author":"球接子","authorAvatar":null,"tagIds":[10],"tagNames":["Linux基础"]}}