date

显示或设置系统时间与日期

概要

  1. date [OPTION]... [+FORMAT]
  2. date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]

主要用途

  • 转换时间到选定的格式,默认为当前。
  • 设置系统时间。

参数

format:输出的时间格式。

  1. format可用的转义序列如下:
  2. %% 百分号
  3. %a 当地缩写的工作日名称(例如,Sun
  4. %A 当地完整的工作日名称(例如,Sunday
  5. %b 当地缩写的月份名称(例如,Jan
  6. %B 当地完整的月份名称(例如,January
  7. %c 当地的日期和时间(例如,Thu Mar 3 23:05:25 2005
  8. %C 世纪,和%Y类似,但是省略后两位(例如,20
  9. %d 一月中的一天(例如,01
  10. %D 日期,等价于%m/%d/%y
  11. %e 一月中的一天,格式使用空格填充,等价于%_d
  12. %F 完整的日期;等价于%+4Y-%m-%d
  13. %g ISO标准计数周的年份的最后两位数字
  14. %G ISO标准计数周的年份,通常只对%V有用
  15. %h 等价于%b
  16. %H 小时,范围(00..23
  17. %I 小时,范围(00..23
  18. %j 一年中的一天,范围(001..366
  19. %k 小时,使用空格填充,范围(0..23),等价于%_H
  20. %l 小时,使用空格填充,范围(1..12),等价于%_I
  21. %m 月,范围(01..12
  22. %M 分钟,范围(00..59
  23. %n 换行符
  24. %N 纳秒,范围(000000000..000000000
  25. %p 用于表示当地的AMPM,如果未知则为空白
  26. %P 类似于%p,但用小写表示
  27. %q 季度,范围(1..4
  28. %r 当地以12小时表示的时钟时间(例如,11:11:04 PM
  29. %R 24小时每分钟;等价于%H:%M
  30. %s 自协调世界时197001010000分以来的秒数
  31. %S 秒数,范围(00..60
  32. %t 水平制表符
  33. %T 时间;等价于%H:%M:%S
  34. %u 一周中的一天(1..7),1代表星期一
  35. %U 一年中的第几周,周日作为一周的起始(00..53
  36. %V ISO标准计数周,该方法将周一作为一周的起始(01..53
  37. %w 一周中的一天(0..6),0代表星期天
  38. %W 一年中的第几周,周一作为一周的起始(00..53
  39. %x 当地的日期表示(例如,12/31/99
  40. %X 当地的时间表示(例如,23:13:48
  41. %y 年份后两位数字,范围(00..99
  42. %Y 年份
  43. %z +hhmm格式的数值化时区格式(例如,-0400
  44. %:z +hh:mm格式的数值化时区格式(例如,-04:00
  45. %::z +hh:mm:ss格式的数值化时区格式(例如,-04:00:00
  46. %:::z 数值化时区格式,相比上一个格式增加':'以显示必要的精度(例如,-04,+05:30
  47. %Z 时区缩写(如EDT
  48. 默认情况下,日期用零填充数字字段;以下可选的符号可以跟在'%'后面:
  49. - (连字符) 不要填充相应的字段。
  50. _ (下划线) 使用空格填充相应的字段。
  51. 0 (数字0) 使用数字0填充相应的字段。
  52. + 用数字0填充,未来年份大于4位数字则在前面加上'+'号。
  53. ^ 允许的情况下使用大写。
  54. # 允许的情况下将默认的大写转换为小写,默认的小写转换为大写。
  55. 在任何标志之后都有一个可选的字段宽度,如小数;然后是一个可选的修饰符,在可用的情况下,使用E来使用当地语言环境的替代表示,
  56. 使用O来使用当地语言环境的替代数字符号。

选项

  1. 长选项与短选项等价
  2. -d, --date=STRING 解析字符串并按照指定格式输出,字符串不能是'now'
  3. --debug 注释已解析的日期,并将有疑问的用法发送到标准错误。
  4. -f, --file=DATEFILE 类似于--date; 一次从DATEFILE处理一行。
  5. -I[FMT], --iso-8601[=FMT] 按照ISO 8601格式输出,FMT可以为'date'(默认),'hours''minutes''seconds''ns'
  6. 例如:2006-08-14T02:34:56-06:00
  7. -R, --rfc-email 按照RFC 5322格式输出,例如: Mon, 14 Aug 2006 02:34:56 -0600
  8. --rfc-3339=FMT 按照RFC 3339格式输出,FMT可以为'date', 'seconds','ns'中的一个,
  9. 例如:2006-08-14 02:34:56-06:00
  10. -r, --reference=FILE 显示文件的上次修改时间。
  11. -s, --set=STRING 根据字符串设置系统时间。
  12. -u, --utc, --universal 显示或设置世界协调时(UTC)。
  13. --help 显示帮助信息并退出。
  14. --version 显示版本信息并退出。

返回值

返回状态为成功除非给出了非法选项或非法参数。

例子

  1. # 格式化输出:
  2. date +"%Y-%m-%d"
  3. 2009-12-07
  4. # 输出昨天日期:
  5. date -d "1 day ago" +"%Y-%m-%d"
  6. 2012-11-19
  7. # 2秒后输出:
  8. date -d "2 second" +"%Y-%m-%d %H:%M.%S"
  9. 2012-11-20 14:21.31
  10. # 传说中的 1234567890 秒:
  11. date -d "1970-01-01 1234567890 seconds" +"%Y-%m-%d %H:%M:%S"
  12. # 或者
  13. date -d@1234567890 +"%F %T"
  14. # 输出结果
  15. 2009-02-13 23:02:30
  16. # 时间格式转换:
  17. date -d "2009-12-12" +"%Y/%m/%d %H:%M.%S"
  18. # 输出结果
  19. 2009/12/12 00:00.00
  20. # apache格式转换:
  21. date -d "Dec 5, 2009 12:00:37 AM" +"%Y-%m-%d %H:%M.%S"
  22. # 输出结果
  23. 2009-12-05 00:00.37
  24. # 格式转换后时间游走:
  25. date -d "Dec 5, 2009 12:00:37 AM 2 year ago" +"%Y-%m-%d %H:%M.%S"
  26. # 输出结果
  27. 2007-12-05 00:00.37
  28. # 时间加减操作:
  29. date +%Y%m%d # 显示年月日
  30. date -d "+1 day" +%Y%m%d # 显示前一天的日期
  31. date -d "-1 day" +%Y%m%d # 显示后一天的日期
  32. date -d "-1 month" +%Y%m%d # 显示上一月的日期
  33. date -d "+1 month" +%Y%m%d # 显示下一月的日期
  34. date -d "-1 year" +%Y%m%d # 显示前一年的日期
  35. date -d "+1 year" +%Y%m%d # 显示下一年的日期
  36. # 设定时间:
  37. date -s # 设置当前时间,只有root权限才能设置,其他只能查看
  38. date -s 20120523 # 设置成20120523,这样会把具体时间设置成00:00:00
  39. date -s 01:01:01 # 设置具体时间,不会对日期做更改
  40. date -s "01:01:01 2012-05-23" # 这样可以设置全部时间
  41. date -s "01:01:01 20120523" # 这样可以设置全部时间
  42. date -s "2012-05-23 01:01:01" # 这样可以设置全部时间
  43. date -s "20120523 01:01:01" # 这样可以设置全部时间
  44. # 有时需要检查一组命令花费的时间:
  45. start=$(date +%s)
  46. nmap wangchujiang.com &> /dev/null
  47. end=$(date +%s)
  48. difference=$(( end - start ))
  49. # 显示执行时间
  50. echo $difference seconds.
  51. # 当你考虑输出带有时间的字符串时,例如(Current time: 2019/05/19):
  52. # 通常使用的方法:
  53. echo "Current time: $(date +"%Y/%m/%d")"
  54. # 另一种方法:
  55. suffix='Current time:'
  56. # 注意如果换成单引号就不能替换变量了。
  57. date +"${suffix} %Y/%m/%d"

注意

  1. 该命令是GNU coreutils包中的命令,相关的帮助信息请查看man -s 1 dateinfo coreutils 'date invocation'