概述
世界标准时间( Coordinated Universal Time
,UTC
),也就是大家所熟知的格林威治标准时间( Greenwich Mean Time
,GMT
)。世界各地时间也世界标准时间为基准划分为不同的时区,例如,中国的北京时间与UTC
的时差为+8
,也就是UTC+8
。美国是UTC-5
。
Calendar Time
:日历时间,是用“
从一个标准时间点到此时的时间经过的秒数”
来表示的时间。无论哪一个时区,在同一时刻对同一个标准时间点来说,日历时间都是一样的。日历时间返回自1970-1-1:00:00:00
以来所经过的秒数累计值。
跟日期时间相关的shell命令
$ date //
显示当前日期
$ time //
显示程序运行的时间
$ hwclock //
显示与设定硬件时钟
$ clock //
显示与设定硬件时钟,是hwclock
的链接文件
$ cal //
显示日历
(1
)date
显示或设置当前日期时间
$ date
显示当前日期时间 --
中国北京时间 CST China Standard Time UTC+8:00
2008
年 05
月 01
日
星期四 04:28:27 CST
$ date –u
显示当前日期时间 --
世界标准时间 UTC
2008
年 04
月 30
日
星期三 20:29:23 UTC
以上两个时间相比有8
个小时的时差
$ date –R
显示当前日期时间 – RFC
格式
Thu, 01 May 2008 04:30:25 +0800
$ date -s 20080501
设置日期
$ date -s 20:40:30
设置时间
(2
)time
显示程序运行时消耗的实际时间,用户CPU
时间和系统CPU
时间。
$ time a.out
可执行程序a.out
real 0m10.081s
程序开始运行到结束的时间
user 0m0.000s
用户CPU
时间,
sys 0m0.004s
系统CPU
时间
用户CPU
时间等于times
函数返回的struct tms
中的tms_utime
和 tms_cutime
和。
系统CPU
时间等于times
函数返回的struct tms
中的tms_stime
和 tms_cstime
和。
(3
)hwclock
显示与设定硬件时钟
在Linux
中有硬件时钟与系统时钟等两种时钟。硬件时钟是指主机板上的时钟设备,也就是通常可在BIOS
画面设定的时钟。系统时钟则是指 kernel
中的时钟。当Linux
启动时系统时钟会去读取硬件时钟的设定,之后系统时钟即独立运作。所有Linux
相关指令与函数都是读取系统时钟的设定。
# hwclock –show
显示硬件时钟的时间与日期
# hwclock –hctosys
将硬件时钟调整为与目前的系统时钟一致
# hwclock –systohc
将硬件时钟调整为与目前的系统时钟一致
# hwclock --set --date="20080430 21:30:30"
设定硬件时钟
# hwclock
同hwclock –show
Clock
命名是hwclock
的链接文件
$ ls -al /sbin/clock
lrwxrwxrwx 1 root root 7 03-08 23:59 /sbin/clock -> hwclock
(4
)显示日历
$ cal
显示本年本月的日历
$ cal month year
显示指定年月的日历: cal 4 2008
1.2 跟日期时间有关的数据结构
1.2.1 clock_t 结构
程序开始运行到此时所经过的CPU
时钟计时单元数用clock
数据类型表示。
typedef long clock_t;
#define CLOCKS_PER_SEC ((clock_t)1000) //
每个时钟单元是1
毫秒
1.2.2 time_t 结构
日历时间( Calendar Time
)是通过time_t
数据类型来表示的,用time_t
表示的时间(日历时间)是从一个时间点(1970
年1
月1
日0
时0
分0
秒
)到此时的秒数。
typedef long time_t; //
时间值
1.2.3 tm结构
通过tm
结构来获得日期和时间
struct tm {
int tm_sec; /*
秒 –
取值区间为[0,59] */
int tm_min; /*
分 -
取值区间为[0,59] */
int tm_hour; /*
时 -
取值区间为[0,23] */
int tm_mday; /*
一个月中的日期 -
取值区间为[1,31] */
int tm_mon; /*
月份(从一月开始,0
代表一月) -
取值区间为[0,11] */
int tm_year; /*
年份,其值等于实际年份减去1900 */
int tm_wday; /*
星期 –
取值区间为[0,6]
,其中0
代表星期天,1
代表星期一 */
int tm_yday; /*
从每年1
月1
日开始的天数–
取值区间[0,365]
,其中0
代表1
月1
日 */
int tm_isdst; /*
夏令时标识符,夏令时tm_isdst
为正;不实行夏令时tm_isdst
为0