---
author: ''
category: 技术
comments_data: []
count:
  commentnum: 0
  favtimes: 6
  likes: 8
  sharetimes: 1
  viewnum: 7996
date: '2013-07-19 11:21:00'
editorchoice: false
excerpt: 　　Linux 里内置两个用来显示和校准日历的命令 cal 和 ncal。一旦你习惯使用它们，你会发现使用命令很多时候都比你运用鼠标在 GUI 的日历里查看要来的更迅速和方便。命令行下，有许多参数，这些参数能完成您所需要  ...
fromurl: ''
id: 1667
islctt: false
largepic: /images/p/201610/12/095124vr9cmdgilii8rrwr.png
permalink: /article-1667-1.html
pic: /images/s/nonphoto.png
related: []
reviewer: ''
selector: ''
summary: 　　Linux 里内置两个用来显示和校准日历的命令 cal 和 ncal。一旦你习惯使用它们，你会发现使用命令很多时候都比你运用鼠标在 GUI 的日历里查看要来的更迅速和方便。命令行下，有许多参数，这些参数能完成您所需要  ...
tags:
- cal
- ncal
thumb: false
title: 显示日历信息的命令 cal 和 ncal
titlepic: false
translator: ''
updated: '2013-07-19 11:21:00'
---

　　Linux 里内置两个用来显示和校准日历的命令 cal 和 ncal。一旦你习惯使用它们，你会发现使用命令很多时候都比你运用鼠标在 GUI 的日历里查看要来的更迅速和方便。命令行下，有许多参数，这些参数能完成您所需要的所有关于日历的需求，目前来说，我还没有发现我需要显示的一种日历的需求是它没有的，哈。


　　下面，我就来和大家一起学习学习这些命令，这些命令我都在 Ubuntu Linux 日常使用：


**问1、如何显示当前月份的信息**


答：直接使用 cal 命令就可以，不需要添加任何参数



```
$ cal
     July 2013        
Su Mo Tu We Th Fr Sa  
    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
```

　　当然，您使用 ncal 也会得到同样的效果：



```
$ ncal
    July 2013         
Su     7 14 21 28   
Mo  1  8 15 22 29   
Tu  2  9 16 23 30   
We  3 10 **17** 24 31   
Th  4 11 18 25      
Fr  5 12 19 26      
Sa  6 13 20 27
```

　　您可以看到整个当前月份的日历，当天日期是高亮显示的，您可以使用 -h 参数来关闭高亮。


**问2、如何竖向排列日期**


答：使用 ncal 命令同时添加 -J 参数



```
$ ncal -J
    July 2013         
Su  1  8 15 22 29   
Mo  2  9 16 23 30   
Tu  3 10 17 24 31   
We  **4** 11 18 25      
Th  5 12 19 26      
Fr  6 13 20 27      
Sa  7 14 21 28
```

**问3、想查询复活节日期**


答：使用 ncal 命令添加 -e 参数



```
$ ncal -e
31 March 2013
```

**问4、怎么显示 Julian 日历**


答：使用 cal 命令添加 -j 参数



```
$ cal -j
         July 2013           
 Su  Mo  Tu  We  Th  Fr  Sa  
    182 183 184 185 186 187  
188 189 190 191 192 193 194  
195 196 197 **198** 199 200 201  
202 203 204 205 206 207 208  
209 210 211 212
```

**问5、如何显示指定月份日历**


答：使用 cal 命令添加 -m 参数和月份



```
$ cal -m1
    January 2013      
Su Mo Tu We Th Fr Sa  
       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
```

　　默认情况下，您添加的 -m参数和月份为当年的月份，如果您希望看到指定的某个年的月份，您可以在后面添加四位数字的年份。



```
$ cal -m1 1999
    January 1999      
Su Mo Tu We Th Fr Sa  
                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
```

**问6、如何同时显示前一个月本月和下一个月三个月的日历**


答：使用 cal 命令添加 -3 参数



```
$ cal -3
     June 2013             July 2013            August 2013       
Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa  
                   1      1  2  3  4  5  6               1  2  3  
 2  3  4  5  6  7  8   7  8  9 10 11 12 13   4  5  6  7  8  9 10  
 9 10 11 12 13 14 15  14 15 16 **17** 18 19 20  11 12 13 14 15 16 17  
16 17 18 19 20 21 22  21 22 23 24 25 26 27  18 19 20 21 22 23 24  
23 24 25 26 27 28 29  28 29 30 31           25 26 27 28 29 30 31  
30
```

　　同样道理，您可以查看任意三个月的日历：



```
$ cal -3 -m3 1984
   February 1984           March 1984            April 1984       
Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa  
          1  2  3  4               1  2  3   1  2  3  4  5  6  7  
 5  6  7  8  9 10 11   4  5  6  7  8  9 10   8  9 10 11 12 13 14  
12 13 14 15 16 17 18  11 12 13 14 15 16 17  15 16 17 18 19 20 21  
19 20 21 22 23 24 25  18 19 20 21 22 23 24  22 23 24 25 26 27 28  
26 27 28 29           25 26 27 28 29 30 31  29 30
```

**问7、如何显示orthodox Easter 的信息**


答：使用 ncal 命令添加 -o 参数



```
$ ncal -o
 5 May 2013
```

**问8、如何显示国家代码**


答：使用 ncal 命令添加 -p 参数



```
$ ncal -p
 AL Albania        1912-11-30      IT Italy          1582-10-04
 AT Austria        1583-10-05      JP Japan          1918-12-18
 AU Australia      1752-09-02      LI Lithuania      1918-02-01
 BE Belgium        1582-12-14      LN Latin          9999-05-31
 BG Bulgaria       1916-03-18      LU Luxembourg     1582-12-14
 CA Canada         1752-09-02      LV Latvia         1918-02-01
 CH Switzerland    1655-02-28      NL Netherlands    1582-12-14
 CN China          1911-12-18      NO Norway         1700-02-18
 CZ Czech Republic 1584-01-06      PL Poland         1582-10-04
 DE Germany        1700-02-18      PT Portugal       1582-10-04
 DK Denmark        1700-02-18      RO Romania        1919-03-31
 ES Spain          1582-10-04      RU Russia         1918-01-31
 FI Finland        1753-02-17      SI Slovenia       1919-03-04
 FR France         1582-12-09      SW Sweden         1753-02-17
 GB United Kingdom 1752-09-02      TR Turkey         1926-12-18
 GR Greece         1924-03-09     *US United States  1752-09-02
 HU Hungary        1587-10-21      YU Yugoslavia     1919-03-04
 IS Iceland        1700-11-16
```

**问9、如何按自然月显示周信息**


答：使用 ncal 命令添加 -w 参数



```
$ ncal -w
    July 2013         
Su     7 14 21 28   
Mo  1  8 15 22 29   
Tu  2  9 16 23 30   
We  3 10 17 24 31   
Th  4 11 18 25      
Fr  5 12 19 26      
Sa  6 13 20 27      
   26 27 28 29 30
```

　　最下面的一行是下个月的信息。


**问10、怎么一下查看全年的日历**


答：使用 ncal 命令添加 -y 参数和 四位数的年份



```
$ ncal -y 2010
                                  2010
    January           February          March             April             
Su     3 10 17 24 31     7 14 21 28        7 14 21 28        4 11 18 25   
Mo     4 11 18 25     1  8 15 22        1  8 15 22 29        5 12 19 26   
Tu     5 12 19 26     2  9 16 23        2  9 16 23 30        6 13 20 27   
We     6 13 20 27     3 10 17 24        3 10 17 24 31        7 14 21 28   
Th     7 14 21 28     4 11 18 25        4 11 18 25        1  8 15 22 29   
Fr  1  8 15 22 29     5 12 19 26        5 12 19 26        2  9 16 23 30   
Sa  2  9 16 23 30     6 13 20 27        6 13 20 27        3 10 17 24      

    May               June              July              August            
Su     2  9 16 23 30     6 13 20 27        4 11 18 25     1  8 15 22 29   
Mo     3 10 17 24 31     7 14 21 28        5 12 19 26     2  9 16 23 30   
Tu     4 11 18 25     1  8 15 22 29        6 13 20 27     3 10 17 24 31   
We     5 12 19 26     2  9 16 23 30        7 14 21 28     4 11 18 25      
Th     6 13 20 27     3 10 17 24        1  8 15 22 29     5 12 19 26      
Fr     7 14 21 28     4 11 18 25        2  9 16 23 30     6 13 20 27      
Sa  1  8 15 22 29     5 12 19 26        3 10 17 24 31     7 14 21 28      

    September         October           November          December          
Su     5 12 19 26        3 10 17 24 31     7 14 21 28        5 12 19 26   
Mo     6 13 20 27        4 11 18 25     1  8 15 22 29        6 13 20 27   
Tu     7 14 21 28        5 12 19 26     2  9 16 23 30        7 14 21 28   
We  1  8 15 22 29        6 13 20 27     3 10 17 24        1  8 15 22 29   
Th  2  9 16 23 30        7 14 21 28     4 11 18 25        2  9 16 23 30   
Fr  3 10 17 24        1  8 15 22 29     5 12 19 26        3 10 17 24 31   
Sa  4 11 18 25        2  9 16 23 30     6 13 20 27        4 11 18 25
```

**问11、如何显示某个月和某个月前几个月和后几个月的日历**


答：使用 cal 命令添加 -m -B -A 参数和月个数



```
$ cal -m4 -B2 -A2
   February 2013           March 2013            April 2013       
Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa  
                1  2                  1  2      1  2  3  4  5  6  
 3  4  5  6  7  8  9   3  4  5  6  7  8  9   7  8  9 10 11 12 13  
10 11 12 13 14 15 16  10 11 12 13 14 15 16  14 15 16 17 18 19 20  
17 18 19 20 21 22 23  17 18 19 20 21 22 23  21 22 23 24 25 26 27  
24 25 26 27 28        24 25 26 27 28 29 30  28 29 30              
                      31                                          

      May 2013             June 2013        
Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa  
          1  2  3  4                     1  
 5  6  7  8  9 10 11   2  3  4  5  6  7  8  
12 13 14 15 16 17 18   9 10 11 12 13 14 15  
19 20 21 22 23 24 25  16 17 18 19 20 21 22  
26 27 28 29 30 31     23 24 25 26 27 28 29  
                      30
```

　　显示结果上，您可以看出，我们想显示 4 月份和 4 月份前两个月和后两个月的日历。如果您想显示指定年份的日历同时在显示年份前后的几个月，那么直需要在添加 -y 参数和四位数的年份即可：



```
$ cal -y 2012 -B2 -A2
   November 2011         December 2011          January 2012      
Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa  
       1  2  3  4  5               1  2  3   1  2  3  4  5  6  7  
 6  7  8  9 10 11 12   4  5  6  7  8  9 10   8  9 10 11 12 13 14  
13 14 15 16 17 18 19  11 12 13 14 15 16 17  15 16 17 18 19 20 21  
20 21 22 23 24 25 26  18 19 20 21 22 23 24  22 23 24 25 26 27 28  
27 28 29 30           25 26 27 28 29 30 31  29 30 31              

   February 2012           March 2012            April 2012       
Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa  
          1  2  3  4               1  2  3   1  2  3  4  5  6  7  
 5  6  7  8  9 10 11   4  5  6  7  8  9 10   8  9 10 11 12 13 14  
12 13 14 15 16 17 18  11 12 13 14 15 16 17  15 16 17 18 19 20 21  
19 20 21 22 23 24 25  18 19 20 21 22 23 24  22 23 24 25 26 27 28  
26 27 28 29           25 26 27 28 29 30 31  29 30                 

      May 2012             June 2012             July 2012        
Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa  
       1  2  3  4  5                  1  2   1  2  3  4  5  6  7  
 6  7  8  9 10 11 12   3  4  5  6  7  8  9   8  9 10 11 12 13 14  
13 14 15 16 17 18 19  10 11 12 13 14 15 16  15 16 17 18 19 20 21  
20 21 22 23 24 25 26  17 18 19 20 21 22 23  22 23 24 25 26 27 28  
27 28 29 30 31        24 25 26 27 28 29 30  29 30 31              

    August 2012          September 2012         October 2012      
Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa  
          1  2  3  4                     1      1  2  3  4  5  6  
 5  6  7  8  9 10 11   2  3  4  5  6  7  8   7  8  9 10 11 12 13  
12 13 14 15 16 17 18   9 10 11 12 13 14 15  14 15 16 17 18 19 20  
19 20 21 22 23 24 25  16 17 18 19 20 21 22  21 22 23 24 25 26 27  
26 27 28 29 30 31     23 24 25 26 27 28 29  28 29 30 31           
                      30                                          

   November 2012         December 2012          January 2013      
Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa  
             1  2  3                     1         1  2  3  4  5  
 4  5  6  7  8  9 10   2  3  4  5  6  7  8   6  7  8  9 10 11 12  
11 12 13 14 15 16 17   9 10 11 12 13 14 15  13 14 15 16 17 18 19  
18 19 20 21 22 23 24  16 17 18 19 20 21 22  20 21 22 23 24 25 26  
25 26 27 28 29 30     23 24 25 26 27 28 29  27 28 29 30 31        
                      30 31                                       

   February 2013      
Su Mo Tu We Th Fr Sa  
                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
```

　　从结果上我们看到，除了 2012 年整年外，我们还能看到 2011 年最后俩月和 2013 年前俩月的日历。


**问12、如何让 ncal 命令显示成 cal 命令的结果**


答：可以使用 -C 参数来完成这一点



```
$ ncal
    July 2013         
Su     7 14 21 28   
Mo  1  8 15 22 29   
Tu  2  9 16 23 30   
We  3 10 17 24 31   
Th  4 11 18 25      
Fr  5 12 19 26      
Sa  6 13 20 27      

$ cal
     July 2013        
Su Mo Tu We Th Fr Sa  
    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           

$ ncal -C
     July 2013        
Su Mo Tu We Th Fr Sa  
    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
```

　　同样，你可以使用 -N 参数来让 cal 命令看起来和 ncal 一样：



```
$ cal
     July 2013        
Su Mo Tu We Th Fr Sa  
    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           

$ ncal
    July 2013         
Su     7 14 21 28   
Mo  1  8 15 22 29   
Tu  2  9 16 23 30   
We  3 10 17 24 31   
Th  4 11 18 25      
Fr  5 12 19 26      
Sa  6 13 20 27      

$ cal -N
    July 2013         
Su     7 14 21 28   
Mo  1  8 15 22 29   
Tu  2  9 16 23 30   
We  3 10 17 24 31   
Th  4 11 18 25      
Fr  5 12 19 26      
Sa  6 13 20 27
```

**问13、如何让日历显示成以周一为每周第一天的样子**


答：使用 ncal 命令添加 -M 参数即可



```
$ ncal -M
    July 2013         
Mo  1  8 15 22 29   
Tu  2  9 16 23 30   
We  3 10 **17** 24 31   
Th  4 11 18 25      
Fr  5 12 19 26      
Sa  6 13 20 27      
Su  7 14 21 28
```

　　还有一个 -S 参数，可以按周日为第一天来显示


**问14、如何切换 ncal 命令为以前的显示方式**


答：使用 ncal 命令添加 -b 参数



```
$ ncal
    July 2013         
Su     7 14 21 28   
Mo  1  8 15 22 29   
Tu  2  9 16 23 30   
We  3 10 **17** 24 31   
Th  4 11 18 25      
Fr  5 12 19 26      
Sa  6 13 20 27      

$ ncal -b
     July 2013        
Su Mo Tu We Th Fr Sa  
    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
```

**cal 和 ncal 命令的一些其他相关信息**


　　虽然我们可以查看这两个的命令的 man page 来得到更多的信息，不过在这里，我还有一些其他信息要告诉大家。需要指定年份的时候，我们需要四位数的年份。不是所有的参数都可以同时使用的，比如 -y, -3, -1 他们之间是冲突的，如果同时使用，后面的参数会覆盖掉前面的参数。


![](/images/s/weibo.png) 已同步至 [linux的微博](http://weibo.com/1772191555/A0J996mbe)