UP | HOME

date-calendat-使用教程

1 date命令

1.1 date命令基本操作

表1  date命令基本操作
%a+%A 星期的简写+星期的全称
%b+%B 月份的简写+月份的全称
%D mm/dd/yy格式
%c 当前时区的时间
%e+%d+%m 去零的日期+日期+月份
%H+%M+%S 24小时制式的时间+秒数
%j 一年中的第几天
%n 换行现实
%Y+%y 全称的年和简写的年
%U 一年中的第几个星期

1.2 date –date :: 计算时间

date命令的 –date 参数 可以让date命令按照指定的时间来显示结果 但是我没有想到的是 –date 参数居然支持进行时间的加减运算

下面这段说明摘自 man date

DATE STRING
       The --date=STRING is a mostly free format human readable date string such as "Sun, 29 Feb 2004 16:21:42  -0800"
       or  "2004-02-29  16:21:42"  or even "next Thursday".  A date string may contain items indicating calendar date,
       time of day, time zone, day of week, relative time, relative date, and numbers.  An empty string indicates  the
       beginning  of  the  day.   The  date  string format is more complex than is easily documented here but is fully
       described in the info documentation.

换句话说,我们可以用它来进行日期间的加减运算,下面是一些例子:

计算2018年11月22日再过60天是什么时候

date --date '2018-11-22 + 60 days' +'%Y-%m-%d'

2019-01-21

计算2018年11月22日,前50天是什么时候

date --date '2018-11-22 - 50 days' +'%Y-%m-%d'

2018-10-03

还可以加上时分秒

date --date '2018-11-22 01:02:03 HKT +12 days +12 hours +15 minutes'

2018年 12月 04日 星期二 13:17:03 HKT

2 cal calender命令

2.1 配置文件

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; -- coding: utf-8; lexical-binding: t -- ;;pengshao-calendar.el—calendar相关配置(一直没有调试) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;; 设置日历 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;设置日历的一些颜色 (setq calendar-load-hook '(lambda () (set-face-foreground 'diary-face "skyblue") (set-face-background 'holiday-face "slate blue") (set-face-foreground 'holiday-face "white")))

;;设置我所在地方的经纬度,calendar里有个功能是日月食的预测,和你的经纬度相联系的。 ;; 让emacs能计算日出日落的时间,在 calendar 上用 S 即可看到 (setq calendar-latitude +36.125) (setq calendar-longitude +117.786) (setq calendar-location-name "Laiwu")

;; 设置阴历显示,在 calendar 上用 pC 显示阴历 (setq chinese-calendar-celestial-stem ["甲" "乙" "丙" "丁" "戊" "己" "庚" "辛" "壬" "癸"]) (setq chinese-calendar-terrestrial-branch ["子" "丑" "寅" "卯" "辰" "巳" "戊" "未" "申" "酉" "戌" "亥"])

;; 设置 calendar 的显示 (setq calendar-remove-frame-by-deleting t) ;(setq calendar-week-start-day 1) ; 设置星期一为每周的第一天 (setq mark-diary-entries-in-calendar t) ; 标记calendar上有diary的日期 (setq mark-holidays-in-calendar nil) ; 为了突出有diary的日期,calendar上不标记节日 (setq view-calendar-holidays-initially nil) ; 打开calendar的时候不显示一堆节日

;; 去掉不关心的节日,设定自己在意的节日,在 calendar 上用 h 显示节日 (setq christian-holidays nil) (setq hebrew-holidays nil) (setq islamic-holidays nil) (setq solar-holidays nil) (setq general-holidays '((holiday-fixed 1 1 "元旦") (holiday-fixed 2 14 "情人节") (holiday-fixed 3 14 "白色情人节") (holiday-fixed 4 1 "愚人节") (holiday-fixed 5 1 "劳动节") (holiday-float 5 0 2 "母亲节") (holiday-fixed 6 1 "儿童节") (holiday-float 6 0 3 "父亲节") (holiday-fixed 7 1 "建党节") (holiday-fixed 8 1 "建军节") (holiday-fixed 9 10 "教师节") (holiday-fixed 10 1 "国庆节") (holiday-fixed 12 25 "圣诞节")))

;;Calendar模式支持各种方式来更改当前日期 ;;(这里的“前”是指还没有到来的那一天,“后”是指已经过去的日子) ;; q 退出calendar模式 ;; C-f 让当前日期向前一天 ;; C-b 让当前日期向后一天 ;; C-n 让当前日期向前一周 ;; C-p 让当前日期向后一周 ;; M-} 让当前日期向前一个月 ;; M-{ 让当前日期向后一个月 ;; C-x ] 让当前日期向前一年 ;; C-x [ 让当前日期向后一年 ;; C-a 移动到当前周的第一天 ;; C-e 移动到当前周的最后一天 ;; M-a 移动到当前月的第一天 ;; M-e 多动到当前月的最后一天 ;; M-< 移动到当前年的第一天 ;; M-> 移动到当前年的最后一天

;;Calendar模式支持移动多种移动到特珠日期的方式 ;; g d 移动到一个特别的日期 ;; o 使某个特殊的月分作为中间的月分 ;; . 移动到当天的日期 ;; p d 显示某一天在一年中的位置,也显示本年度还有多少天。 ;; C-c C-l 刷新Calendar窗口

;; Calendar支持生成LATEX代码。 ;; t m 按月生成日历 ;; t M 按月生成一个美化的日历 ;; t d 按当天日期生成一个当天日历 ;; t w 1 在一页上生成这个周的日历 ;; t w 2 在两页上生成这个周的日历 ;; t w 3 生成一个ISO-SYTLE风格的当前周日历 ;; t w 4 生成一个从周一开始的当前周日历 ;; t y 生成当前年的日历

;;EMACS Calendar支持配置节日: ;; h 显示当前的节日 ;; x 定义当天为某个节日 ;; u 取消当天已被定义的节日 ;; e 显示所有这前后共三个月的节日。 ;; M-x holiday 在另外的窗口的显示这前后三个月的节日。

;; 另外,还有一些特殊的,有意思的命令: ;; S 显示当天的日出日落时间(是大写的S) ;; p C 显示农历可以使用 ;; g C 使用农历移动日期可以使用

(provide 'pengshao-calendar)

2.2 添加代办事项

在Calendar中可以为指定的日期添加代办事项:

  • 使用i d命令为指定日期添加代办事项 在calendar中输入i d命令后,Emacs会打开一个教diary的文件,并自动填入光标所处的日期信息 只需要接着输入代办事项的信息并保存就可以了
  • 使用i w命令为每周的某一天添加代办事项 可以使用i w命令建立每周例行任务
  • 使用i m命令为每月的某一天添加代办事项 我们可以使用i m命令建立每月例行任务
  • 使用i y命令为每年的某一天添加代变事项 可以使用i y命令建立每年的例行任务
  • 使用i a建立周年纪念日 跟i y命令类似,但calendar会记录起始年份
  • 使用i b命令为一个时间段添加代办事项 将光标和mark放置在一段时间的起始/结尾处,按下i b键,Calendar自动插入时间段的信息我们只要输入待办事项的信息就行了
  • 使用i c命令定义一个循环事项 按下i c后,calendar提示输入循环间隔的日期 虽有Calendar自动插入代表循环的时间信息,我们只需要输入代变事项的信息就行了

    命令 说明

  • i d 添加待办事项
  • i w 添加每周例行任务
  • i m 添加每月例行任务
  • i y 添加每年例行任务
  • i a 添加周年纪念日
  • i b 为一段时间添加待办事项
  • i c 添加循环事项

2.3 日期信息

将光标定位到指定的日期处后,Emacs还提供了一些命令来获取光标所处日期的信息. 常用到的命令有:

  • 使用p d命令显示光标所处日期是当年中的第几天
  • 使用p C命令显示光标所处日期的农历信息
  • M-=计算一段时间的天数 在要计算时间段的起始天数/结束天数用命令C-@定义为mark 然后将光标移动到时间段的结束天数/起始天数,这就定义了一个时间段区域 按下M-=后就会在minibuffer中显示该时间段包含的天数 该天数包含了起始天数和结束天数的.
  • 使用h命令查看光标所处日期的假期信息 如果光标所处的日期并没有假期,则Emacs在minibuffer提示No Holidays known 否则则显示该日期对应节假日的名字. Emacs内置了一些常见的节假日信息 另外,Emacs也提供了一些函数供我们自定义节假日:

    (holiday-fixed m d 节日名) ;定义m月的第d日为xx节假日
    (holiday-float m w n 节日名) ;定义m月的第w个星期的第n天为xx节假日,默认周日为第0日
    
  • 使用a命令查看所有三个月的假期信息 按下a键后,Emacs会在另一个窗口显示calendar中三个月期间内的所有节假日信息.

    使用x命令在calendar中标示出所有为节假日的日期来 若我们想让calendar自动标示出节假日的日期来 则更改calendar-mark-holidays-flag的值为非nil即可

    (setq calendar-mark-holidays-flag t)    ;让calendar自动标记出节假日的日期
    
  • 使用d命令显示光标当前日期的代办事项 可以在d命令前加上一个数字n,表示显示n天内的所有代办事项
  • 使用m命令在calendar中标记出所有记有待办事项的日期 该命令跟x类似,只是它标记出的是带有待办事项的日期. 你也可以通过更改变量calendar-mark-diary-entries-flag的值为非nil来让calendar自动标记出记有待办事项的日期.

    (setq calendar-mark-diary-entries-flag t)    ;让calendar自动标记出记有待办事项的日期
    
  • 值得一提的时,如果你将记录某项代办事项但却不想被标记出来,只需要在执行插入待办事项的命令前执行C-u就行了(就像C-u i d这样).
  • 使用u命令去除calendar中的标记

命令 说明

  • p d 显示当前日期是当年的第几天
  • p C 显示当前日期的农历信息
  • M-= 计算一段时间的天数
  • h 查看当前日期的假期信息
  • a 查看三个月内的所有节假日信息
  • x 标记出calendar中所有为节假日的日期
  • d 查看指定日期的待办事项
  • m 标记出calendar中所有记有待办事项的日期
  • u 清除calendar中的标记

2.4 导出为HTML

Emacs提供了两个命令来将日历信息,节假日信息和待办事项信息一起导出成HTML文件供我们查看,这两个命令为:

  • 命令 说明
  • H m 导出单月的日程安排信息
  • H y 导出当年的每个月的日程安排信息

2.5 约会提醒功能

  1. 用M-x appt-activate开启约会提醒功能 要使用约会提醒功能,先需要开启appointment通知功能,命令是M-x appt-activate
  2. 随后使用M-x appt-add命令来添加一个约会提醒. 执行app-add命令后,在Emacs提醒你依次输入约会开始的时间,提醒的消息,和提前多少分钟开始提醒. 虽有在离约会还有指定分钟的时候,Emacs会在底部弹出一个窗口,窗口的内容显示了指定的提醒消息.
  3. 使用M-x appt-delete来删除一个约会提醒 执行appt-delete后,Emacs依次显示所有添加的约会提醒,并询问是否删除,按y表示删除,按n表示保留
  4. 在mode-line上显示约会提醒的倒计时 通过设置变量appt-display-mode-line的值为非nil,Emacs会在mode-line上显示还有多少分钟到下一个约会的倒计时.

    (setq appt-display-mode-line t)         ;在mode-line上显示还有多少分钟到约会的倒计时
    
  5. M-x appt-activate 开启appointment提醒功能
  6. M-x appt-add 添加一个约会提醒
  7. M-x appt-delete 删除约会提醒