Linux下date命令使用举例说明

简介:

在数据库备份或者应用备份时候只要涉及到shell脚本基本都会用到"date"命令来获取时间,今天结合日常使用方式一一举例说明。

1、date --help常见参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
[root@node04 ~] # date --help
Usage:  date  [OPTION]... [+FORMAT]
   or:   date  [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]
Display the current  time  in  the given FORMAT, or  set  the system  date .
Mandatory arguments to long options are mandatory  for  short options too.
   -d, -- date =STRING         display  time  described by STRING, not  'now'
   -f, -- file =DATEFILE       like -- date  once  for  each line of DATEFILE
   -I[TIMESPEC], --iso-8601[=TIMESPEC]  output  date /time  in  ISO 8601  format .
                             TIMESPEC= 'date'  for  date  only (the default),
                             'hours' 'minutes' 'seconds' , or  'ns'  for  date
                             and  time  to the indicated precision.
   -r, --reference=FILE      display the last modification  time  of FILE
   -R, --rfc-2822            output  date  and  time  in  RFC 2822  format .
                             Example: Mon, 07 Aug 2006 12:34:56 -0600
       --rfc-3339=TIMESPEC   output  date  and  time  in  RFC 3339  format .
                             TIMESPEC= 'date' 'seconds' , or  'ns'  for
                             date  and  time  to the indicated precision.
                             Date and  time  components are separated by
                             a single space: 2006-08-07 12:34:56-06:00
   -s, -- set =STRING           set  time  described by STRING
   -u, --utc, --universal    print or  set  Coordinated Universal Time (UTC)
       --help     display this help and  exit
       --version  output version information and  exit
FORMAT controls the output.  Interpreted sequences are:
   %%   a literal %
   %a   locale's abbreviated weekday name (e.g., Sun)
   %A   locale's full weekday name (e.g., Sunday)
   %b   locale's abbreviated month name (e.g., Jan)
   %B   locale's full month name (e.g., January)
   %c   locale's  date  and  time  (e.g., Thu Mar  3 23:05:25 2005)
   %C   century; like %Y, except omit last two digits (e.g., 20)
   %d   day of month (e.g., 01)
   %D    date ; same as %m/%d/%y
   %e   day of month, space padded; same as %_d
   %F   full  date ; same as %Y-%m-%d
   %g   last two digits of year of ISO week number (see %G)
   %G   year of ISO week number (see %V); normally useful only with %V
   %h   same as %b
   %H   hour (00..23)
   %I   hour (01..12)
   %j   day of year (001..366)
   %k   hour, space padded ( 0..23); same as %_H
   %l   hour, space padded ( 1..12); same as %_I
   %m   month (01..12)
   %M   minute (00..59)
   %n   a newline
   %N   nanoseconds (000000000..999999999)
   %p   locale's equivalent of either AM or PM; blank  if  not known
   %P   like %p, but lower  case
   %r   locale's 12-hour clock  time  (e.g., 11:11:04 PM)
   %R   24-hour hour and minute; same as %H:%M
   %s   seconds since 1970-01-01 00:00:00 UTC
   %S   second (00..60)
   %t   a tab
   %T    time ; same as %H:%M:%S
   %u   day of week (1..7); 1 is Monday
   %U   week number of year, with Sunday as first day of week (00..53)
   %V   ISO week number, with Monday as first day of week (01..53)
   %w   day of week (0..6); 0 is Sunday
   %W   week number of year, with Monday as first day of week (00..53)
   %x   locale's  date  representation (e.g., 12 /31/99 )
   %X   locale's  time  representation (e.g., 23:13:48)
   %y   last two digits of year (00..99)
   %Y   year
   %z   +hhmm numeric  time  zone (e.g., -0400)
   %:z  +hh:mm numeric  time  zone (e.g., -04:00)
   %::z  +hh:mm:ss numeric  time  zone (e.g., -04:00:00)
   %:::z  numeric  time  zone with : to necessary precision (e.g., -04, +05:30)
   %Z   alphabetic  time  zone abbreviation (e.g., EDT)


2、获取日期

①获取当天日期

1
2
3
4
5
6
7
8
date date  +%F、%Y%m%d
[root@node04 ~] # date
Wed Mar 15 10:02:54 CST 2017
[root@node04 ~] # date +%F
2017-03-15
[root@node04 ~] # date +%Y%m%d
20170315
[root@node04 ~] #

以上格式根据个人习惯进行调整 

②获取昨天日期

 date -d yesterday +%Y%m%d、date -d last-day +%Y%m%d、date -d last-day +%F、 date -d yesterday +%F

1
2
3
4
5
6
7
8
9
[root@node04 ~] # date -d yesterday +%Y%m%d
20170314
[root@node04 ~] # date -d last-day +%Y%m%d
20170314
[root@node04 ~] # date -d last-day +%F
2017-03-14
[root@node04 ~] # date -d yesterday +%F
2017-03-14
[root@node04 ~] #

③获取明天日期

1
2
3
4
5
6
7
8
9
[root@node04 ~] # date -d next-day +%Y%m%d
20170316
[root@node04 ~] # date -d tomorrow +%Y%m%d
20170316
[root@node04 ~] # date -d next-day +%F
2017-03-16
[root@node04 ~] # date -d tomorrow +%F
2017-03-16
[root@node04 ~] #

④获取上个月日期

1
2
3
4
5
[root@node04 ~] # date -d last-month +%Y%m%d
201702
[root@node04 ~] # date -d last-month +%F
2017-02-15
[root@node04 ~] #

⑤获取下个月日期

1
2
3
4
5
[root@node04 ~] # date -d next-month +%Y%m%d
20170415
[root@node04 ~] # date -d next-month +%F
2017-04-15
[root@node04 ~] #

⑥获取明年日期

1
2
3
4
5
[root@node04 ~] # date -d next-year +%Y
2018
[root@node04 ~] # date -d next-year +%Y%m%d
20180315
[root@node04 ~] #

⑦获取去年日期

1
2
3
4
5
[root@node04 ~] # date -d last-year +%Y
2016
[root@node04 ~] # date -d last-year +%Y%m%d
20160315
[root@node04 ~] #

⑧获取昨天或者N天前的日期

1
2
3
[root@node04 ~] # date +%Y%m%d --date "2 days ago"
20170313
[root@node04 ~] #

这里N取2


⑨日期和时间参数

时间方面

1
2
3
4
5
6
7
8
9
10
11
12
13
14
     %: 印出
     % %n: 下一行
     %t: 跳格
     %H: 小时(00..23)
     %I: 小时(01..12)
     %k: 小时(0..23)
     %l: 小时(1..12)
     %M: 分钟(00..59)
     %p: 显示本地 AM 或 PM
     %r: 直接显示时间 (12 小时制,格式为 hh:mm:ss [AP]M)
     %s: 从 1970 年 1 月 1 日 00:00:00 UTC 到目前为止的秒数 %S: 秒(00..61)
     %T: 直接显示时间 (24 小时制)
     %X: 相当于 %H:%M:%S
     %Z: 显示时区

日期方面

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
   %a:星期几 (Sun..Sat)
     %A:星期几 (Sunday..Saturday)
     %b:月份 (Jan..Dec)
     %B:月份 (January..December)
     %c:直接显示日期和时间
     %d:日 (01..31)
     %D:直接显示日期 (mm/dd/yy)
     %h:同 %b
     %j:一年中的第几天 (001..366)
     %m:月份 (01..12)
     %U:一年中的第几周 (00..53) (以 Sunday 为一周的第一天的情形)
     %w:一周中的第几天 (0..6)
     %W:一年中的第几周 (00..53) (以 Monday 为一周的第一天的情形)
     %x:直接显示日期 (mm/dd/yy)
     %y:年份的最后两位数字 (00.99)
     %Y:完整年份 (0000..9999)

若是不以加号作为开头,则表示要设定时间,而时间格式为:MMDDhhmm[[CC]YY][.ss]

其中:

1
2
3
4
5
6
7
    MM 为月份
     DD 为日
     hh 为小时
     mm 为分钟
     CC 为年份前两位数字
     YY 为年份后两位数字
     ss 为秒数

选项:

1
2
3
4
5
   -d datestr: 显示 datestr 中所设定的时间 (非系统时间)
     --help: 显示辅助讯息
     -s datestr: 将系统时间设为 datestr 中所设定的时间
     -u: 显示目前的格林威治时间
     --version: 显示版本编号


例子:

   

1
2
3
4
  显示时间后跳行,再显示目前日期:date +%T%n%D
     显示月份和日数:date +%B %d
     显示日期和设定时间(12:34:56):date --date 12:34:56
     设置系统当前时间(12:34:56):date --s 12:34:56

注意:当你不希望出现无意义的 0 时(比如说 1999/03/07),则能在标记中插入 - 符号,比如说 date +%-H:%-M:%-S 会把时分秒中无意义的 0 给去掉,像是原本的 08:09:04 会变为 8:9:4。另外,只有取得权限者(比如说 root)才能设定系统时间。


3、扩展功能

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
date 工具可以完成更多的工作,不仅仅只是打印出当前的系统日期。您可以使用它来得到给定的日期究竟是星期几,并得到相对于当前日期的相对日期。了解某一天是星期几。
GNU 对 date 命令的另一个扩展是 -d 选项,当您的桌上没有日历表时(Unix 用户不需要日历表),该选项非常有用。使用这个功能强大的选项,通过将日期作为引号括起来的参数提供,您可以快速地查明一个特定的日期究竟是星期几:
[root@node04 ~]# date -d "nov 22"
2011年 11月 22日 星期二 00:00:00 CST
在本示例中,您可以看到今年的 11 月 22 日是星期二。所以,假设在11月22日召开一个重大的会议,您可以立即了解到这一天是星期二,而这一天您将赶到驻地办公室。
获得相对日期
-d 选项还可以告诉您,相对于当前日期若干天的究竟是哪一天,从现在开始的若干天或若干星期以后,或者以前(过去)。通过将这个相对偏移使用引号括起来,作为 -d 选项的参数,就可以完成这项任务。
例如,您需要了解两星期以后的日期。如果您处于Shell提示符处,那么可以迅速地得到答案:
# date -d ’2 weeks’
关于使用该命令,还有其他一些重要的方法。使用 next/last指令,您可以得到以后的星期几是哪一天:
# date -d ’next monday’ (下周一的日期)
# date -d next-day +%Y%m%d(明天的日期)
或者:date -d tomorrow +%Y%m%d
# date -d last-day +%Y%m%d(昨天的日期)
或者:date -d yesterday +%Y%m%d
# date -d last-month +%Y%m(上个月是几月)
# date -d next-month +%Y%m(下个月是几月)
使用 ago 指令,您可以得到过去的日期:
# date -d ’30 days ago’ (30天前的日期)
您可以使用负数以得到相反的日期:
# date -d ’dec 14 -2 weeks’ (相对:dec 14这个日期的两周前的日期)
# date -d ’-100 days’ (100天以前的日期)
# date -d ’50 days’(50天后的日期)
这个技巧非常有用,它可以根据将来的日期为自己设置提醒,可能是在脚本或Shell启动文件中,如下所示:
DAY=`date -d ’2 weeks’ +"%b %d"`
if test "`echo $DAY`" = "Aug 16"; then echo ’Product launch is now two weeks away!’; fi






      本文转自027ryan  51CTO博客,原文链接http://blog.51cto.com/ucode/1906677 :,如需转载请自行联系原作者







相关文章
|
2月前
|
Linux 网络安全 数据安全/隐私保护
Linux 超级强大的十六进制 dump 工具:XXD 命令,我教你应该如何使用!
在 Linux 系统中,xxd 命令是一个强大的十六进制 dump 工具,可以将文件或数据以十六进制和 ASCII 字符形式显示,帮助用户深入了解和分析数据。本文详细介绍了 xxd 命令的基本用法、高级功能及实际应用案例,包括查看文件内容、指定输出格式、写入文件、数据比较、数据提取、数据转换和数据加密解密等。通过掌握这些技巧,用户可以更高效地处理各种数据问题。
133 8
|
2月前
|
监控 Linux
如何检查 Linux 内存使用量是否耗尽?这 5 个命令堪称绝了!
本文介绍了在Linux系统中检查内存使用情况的5个常用命令:`free`、`top`、`vmstat`、`pidstat` 和 `/proc/meminfo` 文件,帮助用户准确监控内存状态,确保系统稳定运行。
534 6
|
2月前
|
Linux
在 Linux 系统中,“cd”命令用于切换当前工作目录
在 Linux 系统中,“cd”命令用于切换当前工作目录。本文详细介绍了“cd”命令的基本用法和常见技巧,包括使用“.”、“..”、“~”、绝对路径和相对路径,以及快速切换到上一次工作目录等。此外,还探讨了高级技巧,如使用通配符、结合其他命令、在脚本中使用,以及实际应用案例,帮助读者提高工作效率。
103 3
|
2月前
|
监控 安全 Linux
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景,包括 ping(测试连通性)、traceroute(跟踪路由路径)、netstat(显示网络连接信息)、nmap(网络扫描)、ifconfig 和 ip(网络接口配置)。掌握这些命令有助于高效诊断和解决网络问题,保障网络稳定运行。
84 2
|
28天前
|
Linux Shell
Linux 10 个“who”命令示例
Linux 10 个“who”命令示例
53 14
Linux 10 个“who”命令示例
|
7天前
|
Linux
linux查看目录下的文件夹命令,find查找某个目录,但是不包括这个目录本身?
通过本文的介绍,您应该对如何在 Linux 系统中查看目录下的文件夹以及使用 `find` 命令查找特定目录内容并排除该目录本身有了清晰的理解。掌握这些命令和技巧,可以大大提高日常文件管理和查找操作的效率。 在实际应用中,灵活使用这些命令和参数,可以帮助您快速定位和管理文件和目录,满足各种复杂的文件系统操作需求。
31 8
|
17天前
|
Ubuntu Linux
Linux 各发行版安装 ping 命令指南
如何在不同 Linux 发行版(Ubuntu/Debian、CentOS/RHEL/Fedora、Arch Linux、openSUSE、Alpine Linux)上安装 `ping` 命令,详细列出各发行版的安装步骤和验证方法,帮助系统管理员和网络工程师快速排查网络问题。
103 20
|
17天前
|
网络协议 Linux 应用服务中间件
kali的常用命令汇总Linux
kali的常用命令汇总linux
44 7
|
2月前
|
Linux 数据库
Linux中第一次使用locate命令报错?????
在Linux CentOS7系统中,使用`locate`命令时出现“command not found”错误,原因是缺少`mlocate`包。解决方法是通过`yum install mlocate -y`或`apt-get install mlocate`安装该包,并执行`updatedb`更新数据库以解决后续的“can not stat”错误。
36 9
|
2月前
|
监控 网络协议 Linux
Linux netstat 命令详解
Linux netstat 命令详解