linux系统时间获取方式

Linux 操作系统计算系统时间:
主要函数:time  localtime  gmtime  asctime  ctime  mktime  
                  difftime  strftime gmstrftime
1.time()函数
  原型:time_t time(time_t * timer)
  功能:返回一个time_t类型的数据,表示从CUT时间1970年1月1日00:00:00(称为UNIX系统的Epoch时间)到当前时刻的秒数.
       然后调用localtime将time_t所表示的CUT时间转换为本地时间(我们是+8区,比CUT多8个小时)并转成struct tm类型,    
       该类型的各数据成员分别表示年月日时分秒。
2.localtime()函数
  原型:struct tm *localtime(const time_t *clock);
  返回值:返回指向tm 结构体的指针   
  功能:把从1970-1-1零点零分到当前时间系统所偏移的秒数时间转换为日历时间.转换过时区!(Fri Oct 13 17:36:29 2017)
3.gmtime()函数
  原型:struct tm *gmtime(long *clock);
  返回值:返回指向tm 结构体的指针
  功能:所指的time_t结构中的信息(从1970-1-1零点零分到当前时间系统所偏移的秒数)转换成真实世界所使用的时间日期表示  
          方法,为经过时区转换!比localtime小整整8小时!(Fri Oct 13 09:36:29 2017)
4.asctime()函数
  原型:char *asctime(const struct tm *tblock);
  功能:转换日期和时间为相应的字符串(如:Fri Oct 13 17:36:29 2017)
5.ctime()函数
  原型:char *ctime(const time_t *time);
  功能:把日期和时间转换为字符串。(如:Fri Oct 13 17:36:29 2017)
6.mktime()函数
  原型:time_t mktime(strcut tm * timeptr);
  功能:将所指的tm结构数据转换成从公元1970年1月1日0时0分0 秒算起至今的UTC时间所经过的秒数。
7.difftime()函数
  原型:double difftime(time_t time1, time_t time0);
  功能:计算时间间隔,以秒为单位,且只能精确到秒.
8.strftime()函数
  原型:size_t strftime(char *strDest,size_t maxsize,const char *format,const struct tm *timeptr);
  功能:格式化一个时间字符串
  返回值:该函数返回向strDest指向的字符串中放置的字符数。
  说明:类似于sprintf():识别以百分号(%)开始的格式命令集合,格式化输出结果放在一个字符串中。
    %a 星期几的简写
  %A 星期几的全称
  %b 月份的简写
  %B 月份的全称
  %c 标准的日期的时间串
  %C 年份的后两位数字
  %d 十进制表示的每月的第几天
  %D 月/天/年
  %e 在两字符域中,十进制表示的每月的第几天
  %F 年-月-日
  %g 年份的后两位数字,使用基于周的年
  %G 年份,使用基于周的年
  %h 简写的月份名
  %H 24小时制的小时
  %I 12小时制的小时
  %j 十进制表示的每年的第几天
  %m 十进制表示的月份
  %M 十时制表示的分钟数
  %n 新行符
  %p 本地的AM或PM的等价显示
  %r 12小时的时间
  %R 显示小时和分钟:hh:mm
  %S 十进制的秒数
  %t 水平制表符
  %T 显示时分秒:hh:mm:ss
  %u 每周的第几天,星期一为第一天 (值从0到6,星期一为0)
  %U 第年的第几周,把星期日作为第一天(值从0到53)
  %V 每年的第几周,使用基于周的年
  %w 十进制表示的星期几(值从0到6,星期天为0)
  %W 每年的第几周,把星期一做为第一天(值从0到53)
  %x 标准的日期串
  %X 标准的时间串
  %y 不带世纪的十进制年份(值从0到99)
  %Y 带世纪部分的十制年份
  %z,%Z 时区名称,如果不能得到时区名称则返回空字符。
  %% 百分号

  提示:与 gmstrftime() 的行为相同,不同的是返回时间是本地时间。

9.gettimeofday()函数精确到微秒

原型:int gettimeofday(struct  timeval*tv,struct  timezone *tz )

功能:在使用gettimeofday()函数时,第二个参数一般都为空,我们一般只是为了获得当前时间,而不用获得timezone的数值

10.getSystemTime

相关类型:
1.time_t实际上是长整数类型,定义为:typedef long time_t; 
2.timeval是一个结构体,在time.h中定义为:
struct timeval
{
     __time_t tv_sec;                /* Seconds. */
     __suseconds_t tv_usec;      /* Microseconds. */
};
其中,tv_sec为Epoch(1970-1-1零点零分)到创建struct timeval时的秒数,tv_usec为微秒数,即秒后面的零头。
3.tm是一个结构体,定义为:
struct tm
{
    int tm_sec;      /*代表目前秒数,正常范围为0-59,但允许至61秒 */
    int tm_min;     /*代表目前分数,范围0-59*/
    int tm_hour;   /* 从午夜算起的时数,范围为0-23 */
    int tm_mday;  /* 目前月份的日数,范围01-31 */
    int tm_mon;   /*代表目前月份,从一月算起,范围从0-11 */
    int tm_year;   /*从1900 年算起至今的年数*/
    int tm_wday;   /* 一星期的日数,从星期一算起,范围为0-6。*/
    int tm_yday;   /* Days in year.[0-365] */
    int tm_isdst;   /*日光节约时间的旗标DST. [-1/0/1]*/

};

测试代码:

time:

[objc] view plain copy

  1. #include<stdio.h>
  2. #include<time.h>
  3. int main()
  4. {
  5. time_t t;
  6. t=time(NULL);
  7. printf("the number of seconds since 1970-01-01 00:00 is:%d\n",t);
  8. return 0;
  9. }

结果:

[[email protected] time]# ./a.out 
the number of seconds since 1970-01-01 00:00 is:1507889358

localtime gmtime ctime asctime  tzset

[objc] view plain copy

  1. #include<time.h>
  2. #include<stdio.h>
  3. #include<stdlib.h>
  4. int main(int argc, const charchar *argv[])
  5. {
  6. struct tmtm *gmt, *local;
  7. time_t tt;
  8. tzset();//void tzset(void);设置时间环境变量-时区
  9. tt=time(NULL);//等价于time(&tt);
  10. charchar *str=ctime(&tt);
  11. printf("ctime is:%s",str);
  12. local=localtime(&tt);
  13. printf("%4d年%02d月%02d日 %2d:%2d:%2d\n",local->tm_year+1900,local->tm_mon+1,local->tm_mday,local->tm_hour,local->tm_min,local->tm_sec);
  14. printf("lcoaltime is:%s",asctime(local));
  15. gmt=gmtime(&tt);
  16. printf("gmtime is:%s",asctime(gmt));
  17. return 0;
  18. }

结果:

[[email protected] time]# ./a.out 
ctime is:Mon Oct 16 10:40:39 2017
2017年10月16日 10:40:39
lcoaltime is:Mon Oct 16 10:40:39 2017
gmtime is:Mon Oct 16 02:40:39 2017

difftime

[objc] view plain copy

  1. #include <stdio.h>
  2. #include <time.h>
  3. int main(){
  4. time_t t_start, t_end;
  5. t_start = time(NULL) ;
  6. sleep(5);
  7. t_end = time(NULL) ;
  8. printf("time: %.0f s\n", difftime(t_end,t_start)) ;
  9. return 0;
  10. }

结果:

[[email protected] time]# ./a.out 
time: 5 s

gettimeofday

[objc] view plain copy

  1. #include <stdio.h>
  2. #include <sys/time.h>
  3. int main() {
  4. struct timeval start, end;
  5. gettimeofday( &start, NULL );
  6. sleep(3);
  7. gettimeofday( &end, NULL );
  8. int timeuse = 11000000 * ( end.tv_sec - start.tv_sec ) + end.tv_usec - start.tv_usec;
  9. printf("time: %d us\n", timeuse);
  10. return 0;
  11. }

结果:

[[email protected] time]# ./a.out 
time: 3000205 us

getSystemTime

[objc] view plain copy

  1. #include <stdio.h>
  2. #include <sys/timeb.h>
  3. long long getSystemTime() {
  4. struct timeb t;
  5. ftime(&t);
  6. return 11000 * t.time + t.millitm;
  7. }
  8. int main() {
  9. long long start=getSystemTime();
  10. sleep(3);
  11. long long end=getSystemTime();
  12. printf("time: %lld ms\n", end-start);
  13. return 0;
  14. }

结果:

[[email protected] time]# ./a.out 
time: 3001 ms

原文地址:https://www.cnblogs.com/zhengguangaa/p/9050749.html

时间: 2024-11-09 05:09:29

linux系统时间获取方式的相关文章

自动调整linux系统时间和时区与Internet时间同步

调整linux系统时间和时区与Internet时间同步 一.修改时区:# cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime修改为中国的东八区# vi /etc/sysconfig/clockZONE="Asia/Shanghai"UTC=falseARC=false 二.配置新的时间日期设定:# date -s 2008/05/06 时间设定:# date -s 18:40:00 查看硬件时间(BIOS的):    hwclock

Linux_自动调整linux系统时间和时区与Internet时间同步

调整linux系统时间和时区与Internet时间同步 一.修改时区:# cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime修改为中国的东八区# vi /etc/sysconfig/clockZONE="Asia/Shanghai"UTC=falseARC=false 二.配置新的时间日期设定:# date -s 2008/05/06 时间设定:# date -s 18:40:00 查看硬件时间(BIOS的):    hwclock

Linux系统时间管理

一.时区配置 显示时区 [[email protected] ~]# date -R Mon, 19 Dec 2016 14:02:47 +0800 [[email protected] ~]# [[email protected] ~]# date +%z +0800 [[email protected] ~]# 主要就是后面的+0800,东八区 修改时区 [[email protected] ~]# vim /etc/sysconfig/clock [[email protected] ~]

Linux系统时间和硬件时间设置

在Linux中有硬件时钟与系统时钟两种时钟.硬件时钟是指主机板上的时钟设备,也就是通常可在BIOS画面设定的时钟.系统时钟则是指kernel中的时钟.所有Linux相关指令与函数都是读取系统时钟的设定.因为存在两种不同的时钟,那么它们之间就会存在差异.当Linux启动时,系统时钟会去读取硬件时钟的设定,之后系统时钟即独立运作. 用date命令对系统时间进行设置后,并不会去修改硬件时钟,所以系统重启后,系统时间还算会去读取硬件时间,这就是为何date设置失效到原因. 因此,需要在设置系统时间后,将

linux系统时间修改及同步

时间修改date 月日时分年.秒date -s可以直接设置系统时间 比如将系统时间设定成1996年6月10日的命令如下.#date -s 06/10/96将系统时间设定成下午1点12分0秒的命令如下.#date -s 13:12:00时间同步1.首先需了解linux内一任务计划工具crontab crontab可以定时去执行你要做的动作 直接用crontab命令编辑crontab -u //设定某个用户的cron服务,一般root用户在执行这个命令的时候需要此参数crontab -l //列出某

调整linux系统时间和时区

一.修改时区:# cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime修改为中国的东八区# vi /etc/sysconfig/clockZONE="Asia/Shanghai"UTC=falseARC=false 二.配置新的时间日期设定:# date -s 2008/05/06 时间设定:# date -s 18:40:00 查看硬件时间(BIOS的):    hwclock [-rw]     -r:查看现有BIOS时间,默认为-

修改linux系统时间的方法(date命令)

修改linux系统时间的方法(date命令) 来源:互联网 作者:佚名 时间:11-18 23:22:27 [大 中 小] date命令不仅可以显示系统当前时间,还可以用它来修改系统时间,下面简单的介绍下,方便需要的朋友 命令格式为: date -s 时间字符串 例如只修改系统的日期,不修改时间(时分秒) date -s 2012-08-02 或只修改时间不修改日期 date -s 10:08:00 当然也可以同时修改日期和时间 date -s "2012-05-18 04:53:00"

Android常用之系统时间获取

1.Calendar Calendar c = Calendar.getInstance(); 取得系统日期:year = c.get(Calendar.YEAR) month = c.grt(Calendar.MONTH) day = c.get(Calendar.DAY_OF_MONTH) 取得系统时间:hour = c.get(Calendar.HOUR_OF_DAY); minute = c.get(Calendar.MINUTE) 2.new Date SimpleDateFormat

***设置 linux 系统时间以及同步到硬件***

设置 linux 系统时间以及同步到硬件 ______________________________________________________________________________________________ 首先查看当前系统时间 # date -R Sun, 23 Dec 2018 18:19:04 +0800 如果不是 +0800 则说明系统时区错误,我们需要的是东八区. 2.修改时区 # tzselect 在这里我们选择亚洲 Asia,确认之后选择中国(China),