Linux中关于时间的操作

时间所对应的概念
    时区
    夏令时:日光节约时间
    国际日期变更线
    Linux计时方式 :从1970年1月1日 开始计算总秒数 1970年1月1日0时0分0秒起流逝的秒数

计算机网络中的时间

自动校时
        计算机硬件时钟--内部记录时间的BIOS<CMOS>
        计算机系统的时间:--计算机软件时钟
                主机时间同步化 Synchronize
                    NTP--Network Time Protocol 网络时间协议
                    DTSS -- Digital Time Synchronization Protocol
                主机时间+计算传送的延迟误差
手动校时            
            计算机硬件: hwclock
            计算机软件: date
                修改命令  date -s "2017-07-01 07:01:00"
获取日历
    cal
    时间戳有到秒以及毫秒的,到秒的有10位,到毫秒有的有13位。
    一般UNIX是记录到秒的。如果有13位的时间戳,记得转换

Linux 中命令-date

1. 语法: date(选项)(参数)
    选项
        -d<字符串>显示字符串所指的日期与时间; 
        -s<字符串>:根据字符串来设置日期与时间;
         -u:显示GMT
         --help:在线帮助;
        --version:显示版本信息。 
    参数 <+时间日期格式>:指定显示时使用的日期时间格式。
    date 是指 linux 下的 GNU date  
变量命令: 所使用的目的
                    区分出日期的格式
                    区分出是获得日期还是时间戳mysql_v_today_s
today=$(date +%Y-%m-%d)
yest=$(date -d "last-day $today" +%Y-%m-%d)
week=$(date -d"$yest-$((`date -d $yest +%u`-1)) days" +%Y-%m-%d)
today_s=$(date -d $today +%s000)
yest_s=$(date -d $yest  +%s000)
week_s=$(date -d $week  +%s000)
    GNU date 的日期加减运算是支持自然语言的
    -d 主要有三种指令:
            last/next指令 
             ago指令 
            负数指令
01.
    yest_s=$(date -d $yest  +%s000)

02.时间戳变动-可以得到过去的日期:
    yest_s=$(date -d "1 hour ago $yest"  +%s000)
    yest_s=$(date -d "-1 hour ago $yest"  +%s000)

03.前后顺序 以及 横杠加不加
    yest_s=$(date -d "last hour $yest"  +%s000)
    yest_s=$(date -d "last-hour $yest"  +%s000)
    yest_s=$(date -d "next hour $yest"  +%s000)
    yest_s=$(date -d "next-hour $yest"  +%s000)
    yest_s=$(date -d "$yest last hour "  +%s000)

date 里面时间的 + - 注意格式会影响结果/时区(最安全的写法是不要带符号,用自然语言即可)
 注意最好用自然语言,别用 +1 -1 操作,
某些早期版本(如RedHat 4U7)不支持可能造成错误结果,而且这种写法会和时区语法冲突,容易出问题
    yest_s=$(date -d "+ 1 hour $yest"  +%s000)
    yest_s=$(date -d "- 1 hour $yest"  +%s000)
2.时间格式变换
    从时间戳变为日期格式
        date -d  @0            //当时间戳为0的时候,可以看到时间为 197008:00:00
        date -d '@1498863660'
        date -d '@1498863660' +%Y-%m-%d
        date -d  @1498863660   +"%Y-%m-%d %H:%M:%S"
    从时间戳变为日期
        shell将时间字符串与时间戳互转--+%s表示输出时间戳
        date -d "$( date "+%Y-%m-%d %H:%M:%S")" +%s
        date -d last-day +%s
        date -d '2017-07-01 22:14' +%s
    日期格式变换
        date -d "2017-07-01" +"%Y/%m/%d %H:%M:%S"                   
3.今天日期--注意中间有空格
    #对应昨天日期
        date -d   last-day    +%Y-%m-%d
        date -d  'last day'   +%Y-%m-%d
    #对应周的周一
        date -d  'last monday' +"%Y-%m-%d"
        #下周周一
        date -d  'next monday' +"%Y-%m-%d"
        date -d "last sunday" +"%Y%m%d
        date +%w   #获得当天是星期几 
    #今天本日期对应的月初日期   
        date +%Y%m01
        date +%Y-%m-01
    #今天对应的上个月月初
        date -d '1 month ago' +%Y%m01
    #本月月初
        v_lm=`date +%Y%m01`
    #上个月月末
        v_lm_rq=`date -d "${v_lm} last day" +%Y%m%d`
        echo ${v_lm_rq}

4.昨天-特定日期所对应的各个时间
                date -d "yesterday" +%Y-%m-%d
                yestD=`date -d "yesterday" +%Y%m%d`
                echo ${yestD}               
    #昨天日期对应的月初日期
                date -d '1 day  ago' +%Y-%m-01
    #昨天日期的周一
        #写法01.昨天日期
                v_yesterday=`date -d "yesterday" +%Y%m%d`
                #昨天日期对应的周一的日期
                v_lm_week=`date -d "${v_yesterday} last monday" +%Y-%m-%d`
                echo ${v_lm_week}

        #写法02.将当前日期赋值给DATE变量
                DATEA=$(date  -d "yesterday" +%Y%m%d)
                date -d "${DATEA} last monday" +%Y-%m-%d
        #写法03
            #date -d " $(date  -d "yesterday" +%Y%m%d)  last monday" +%Y-%m-%d

Linux中和时间有关的

Linux常驻内存
        daemon  service
linux定时任务crontab
Linux下 ntp时间同步服务器

时间

时间段--时间点
 1. second  minute hour day month year      
2. morning   noon   afternoon    evening   tonight   night
3.week weekend Monday Tuesday  Wednesday Thursday Friday Saturday Sunday
4.月份
    January     Jan     February    Feb         March       Mar 
    April       Apr     May             May         June            Jun 
    July            Jul         August      Aug         September   Sep
    October Oct     November    Nov     December    Dec
5.季度和季节
            anniversary  
            spring  summer  autumn/fall  winter 
 6.年代世纪         
            century  age  1980s

参考:

Linux shell 获取上上月月末日期  http://www.cnblogs.com/valinfo/p/7099335.html
date命令 http://man.linuxde.net/date

blogroll

social