linux c获得时间和设置时间

  1. #include<time.h> //C语言的头文件
  2. #include<stdio.h> //C语言的I/O
  3. void main()
  4. {
  5. time_t now; //实例化time_t结构
  6. struct tm *timenow; //实例化tm结构指针
  7. time(&now);
  8. //time函数读取现在的时间(国际标准时间非北京时间),然后传值给now
  9. timenow = localtime(&now);
  10. //localtime函数把从time取得的时间now换算成你电脑中的时间(就是你设置的地区)
  11. printf("Local time is %s/n",asctime(timenow));
  12. //上句中asctime函数把时间转换成字符,通过printf()函数输出
  13. }

注释:time_t是一个在time.h中定义好的结构体。而tm结构体的原形如下:

  1. struct tm
  2. {
  3. int tm_sec;//seconds 0-61
  4. int tm_min;//minutes 1-59
  5. int tm_hour;//hours 0-23
  6. int tm_mday;//day of the month 1-31
  7. int tm_mon;//months since jan 0-11
  8. int tm_year;//years from 1900
  9. int tm_wday;//days since Sunday, 0-6
  10. int tm_yday;//days since Jan 1, 0-365
  11. int tm_isdst;//Daylight Saving time indicator
  12. };

#include "time.h"

time_t time(time_t *timer); 
调用后将当前系统时间与1900年1月1日相差的秒数存入到timer中,timer可看成是一个长整型数 
struct tm* localtime(const time_t *timer) 
将time()函数调用的结果做为参数传入到localtime()函数中就能得到当前时间和日期,注意得到的年是和1970的差值,月份是和1月的差值

struct tm是一个结构体,定义如下

  1. struct tm
  2. {
  3. int tm_sec; //当前秒
  4. int tm_min; //当前分钟
  5. int tm_hour; //当前小时
  6. int tm_mday; //当前在本月中的天,如11月1日,则为1
  7. int tm_mon; //当前月,范围是0~11
  8. int tm_year; //当前年和1900的差值,如2006年则为36
  9. int tm_wday; //当前在本星期中的天,范围0~6
  10. int tm_yday; //当前在本年中的天,范围0~365
  11. int tm_isdst; //这个我也不清楚
  12. }

求当前时间的示例

  1. int getSystemTime()
  2. {
  3. time_t timer;
  4. struct tm* t_tm;
  5. time(&timer);
  6. t_tm = localtime(&timer);
  7. printf("today is %4d%02d%02d%02d%02d%02d/n", t_tm.tm_year+1900,
  8. t_tm.tm_mon+1, t_tm.tm_mday, t_tm.tm_hour, t_tm.tm_min, t_tm.tm_sec);
  9. return 0;
  10. }
  11. /************************************************
  12. 设置操作系统时间
  13. 参数:*dt数据格式为"2006-4-20 20:30:30"
  14. 调用方法:
  15. char *pt="2006-4-20 20:30:30";
  16. SetSystemTime(pt);
  17. **************************************************/
  18. int SetSystemTime(char *dt)
  19. {
  20. struct rtc_time tm;
  21. struct tm _tm;
  22. struct timeval tv;
  23. time_t timep;
  24. sscanf(dt, "%d-%d-%d %d:%d:%d", &tm.tm_year,
  25. &tm.tm_mon, &tm.tm_mday,&tm.tm_hour,
  26. &tm.tm_min, &tm.tm_sec);
  27. _tm.tm_sec = tm.tm_sec;
  28. _tm.tm_min = tm.tm_min;
  29. _tm.tm_hour = tm.tm_hour;
  30. _tm.tm_mday = tm.tm_mday;
  31. _tm.tm_mon = tm.tm_mon - 1;
  32. _tm.tm_year = tm.tm_year - 1900;
  33. timep = mktime(&_tm);
  34. tv.tv_sec = timep;
  35. tv.tv_usec = 0;
  36. if(settimeofday (&tv, (struct timezone *) 0) < 0)
  37. {
  38. printf("Set system datatime error!/n");
  39. return -1;
  40. }
  41. return 0;
  42. }

其他时间的函数和结构还有:

timeval结构

#include <include/linux/time.h>

struct timeval 

time_t tv_sec; 
susecond_t tv_usec; //当前妙内的微妙数 
};

tms结构 
保存着一个进程及其子进程使用的cpu时间

struct tms 

clock_t tms_utime; 
clock_t tms_stime; 
clock_t tms_cutime; 
clock_t tms_cstime; 
}

timer_struct结构

#include <include/linux/timer.h>

struct timer_struct 

unsigned long expires; //定时器被激活的时刻 
void (*fn)(void); //定时器激活后的处理函数 
}

utime函数 
更改文件的存取和修改时间

int utime(const char pathname, const struct utimbuf *times) // return value 0 or -1

times 为空指针,存取和修改时间设置为当前时间

struct utimbuf 

time_t actime; 
time_t modtime;

}

  1. #include<time.h>
  2. main(){
  3. char *wday[]={“Sun”,”Mon”,”Tue”,”Wed”,”Thu”,”Fri”,”Sat”};
  4. time_t timep;
  5. struct tm *p;
  6. time(&timep);
  7. p=localtime(&timep); /*取得当地时间*/
  8. printf (“%d%d%d ”, (1900+p->tm_year),( l+p->tm_mon), p-
  9. >tm_mday);
  10. printf(“%s%d:%d:%d\n”, wday[p->tm_wday],p->tm_hour, p
  11. ->tm_min, p->tm_sec);
  12. }

asctime(将时间和日期以字符串格式表示)  
相关函数

time,ctime,gmtime,localtime
 
表头文件

#include
 
定义函数

char * asctime(const struct tm * timeptr);
 
函数说明

asctime()将参数timeptr所指的tm结构中的信息转

换成真实世界所使用的时间日期表示方法,然后将结果以字

符串形态返回。此函数已经由时区转换成当地时间,字符串

格式为:

“Wed Jun 30 21:49:08 1993\n”
 
返回值

返回一字符串表示目前当地的时间日期。

附加说明

若再调用相关的时间日期函数,此字符串可能会被破坏。此函数与ctime不同处在于传入的参数是不同的结构。

范例

  1. #include <time.h>
  2. main()
  3. {
  4. time_t timep;
  5. time (&timep);
  6. printf(“%s”,asctime(gmtime(&timep)));
  7. }

执行  Sat Oct 28 02:10:06 2000

ctime(将时间和日期以字符串格式表示)  
相关函数

time,asctime,gmtime,localtime
 
表头文件

#include
 
定义函数

char *ctime(const time_t *timep);
 
函数说明

ctime()将参数timep所指的time_t结构中的信息转

换成真实世界所使用的时间日期表示方法,然后将结果以字

符串形态返回。此函数已经由时区转换成当地时间,字符串

格式为“Wed Jun 30 21 :49 :08 1993\n”。若再调用相关的

时间日期函数,此字符串可能会被破坏。
 
返回值

返回一字符串表示目前当地的时间日期。
 
范例

  1. #include<time.h>
  2. main()
  3. {
  4. time_t timep;
  5. time (&timep);
  6. printf(“%s”,ctime(&timep));
  7. }

执行  Sat Oct 28 10 : 12 : 05 2000

gettimeofday(取得目前的时间)  
相关函数

time,ctime,ftime,settimeofday
 
表头文件

#include 
#include 
 
定义函数

int gettimeofday ( struct timeval * tv , struct  timezone * tz )
 
函数说明

gettimeofday()会把目前的时间有tv所指的结构返回,当地时区的信息则放到tz所指的结构中。
timeval结构定义为:
struct timeval{
long tv_sec; /*秒*/
long tv_usec; /*微秒*/
};
timezone 结构定义为:
struct timezone{
int tz_minuteswest; /*和Greenwich 时间差了多少分钟*/
int tz_dsttime; /*日光节约时间的状态*/
};
上述两个结构都定义在/usr/include/sys/time.h。tz_dsttime

所代表的状态如下
DST_NONE /*不使用*/
DST_USA /*美国*/
DST_AUST /*澳洲*/
DST_WET /*西欧*/
DST_MET /*中欧*/
DST_EET /*东欧*/
DST_CAN /*加拿大*/
DST_GB /*大不列颠*/
DST_RUM /*罗马尼亚*/
DST_TUR /*土耳其*/
DST_AUSTALT /*澳洲(1986年以后)*/
 
返回值

成功则返回0,失败返回-1,错误代码存于errno。

附加说明EFAULT指针tv和tz所指的内存空间超出存取权限


 
范例

  1. #include<sys/time.h>
  2. #include<unistd.h>
  3. main(){
  4. struct timeval tv;
  5. struct timezone tz;
  6. gettimeofday (&tv , &tz);
  7. printf(“tv_sec; %d\n”, tv,.tv_sec) ;
  8. printf(“tv_usec; %d\n”,tv.tv_usec);
  9. printf(“tz_minuteswest; %d\n”, tz.tz_minuteswest);
  10. printf(“tz_dsttime, %d\n”,tz.tz_dsttime);
  11. }

执行  tv_sec: 974857339
tv_usec:136996
tz_minuteswest:-540
tz_dsttime:0
 
 

gmtime(取得目前时间和日期)  
相关函数

time,asctime,ctime,localtime
 
表头文件

#include
 
定义函数

struct tm*gmtime(const time_t*timep);
 
函数说明

gmtime()将参数timep 所指的time_t 结构中的信息

转换成真实世界所使用的时间日期表示方法,然后将结果由

结构tm返回。
结构tm的定义为
struct tm
{
int tm_sec;
int tm_min;
int tm_hour;
int tm_mday;
int tm_mon;
int tm_year;
int tm_wday;
int tm_yday;
int tm_isdst;
};
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 从今年1月1日算起至今的天数,范围为0-365
int tm_isdst 日光节约时间的旗标
此函数返回的时间日期未经时区转换,而是UTC时间。
 
返回值  返回结构tm代表目前UTC 时间
 
范例

  1. #include <time.h>
  2. main(){
  3. char *wday[]={"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};
  4. time_t timep;
  5. struct tm *p;
  6. time(&timep);
  7. p=gmtime(&timep);
  8. printf(“%d%d%d”,(1900+p->tm_year), (1+p->tm_mon),p-
  9. >tm_mday);
  10. printf(“%s%d;%d;%d\n”, wday[p->tm_wday], p->tm_hour, p
  11. ->tm_min, p->tm_sec);
  12. }

执行  2000/10/28 Sat 8:15:38
 
 

localtime(取得当地目前时间和日期)  
相关函数

time, asctime, ctime, gmtime
 
表头文件

#include
 
定义函数

struct tm *localtime(const time_t * timep);
 
函数说明

localtime()将参数timep所指的time_t结构中的信

息转换成真实世界所使用的时间日期表示方法,然后将结果

由结构tm返回。结构tm的定义请参考gmtime()。此函数返回

的时间日期已经转换成当地时区。
 
返回值

返回结构tm代表目前的当地时间。
 
范例

  1. #include<time.h>
  2. main(){
  3. char *wday[]={“Sun”,”Mon”,”Tue”,”Wed”,”Thu”,”Fri”,”Sat”};
  4. time_t timep;
  5. struct tm *p;
  6. time(&timep);
  7. p=localtime(&timep); /*取得当地时间*/
  8. printf (“%d%d%d ”, (1900+p->tm_year),( l+p->tm_mon), p-
  9. >tm_mday);
  10. printf(“%s%d:%d:%d\n”, wday[p->tm_wday],p->tm_hour, p
  11. ->tm_min, p->tm_sec);
  12. }

执行  2000/10/28 Sat 11:12:22
 
 

mktime(将时间结构数据转换成经过的秒数)  
相关函数

time,asctime,gmtime,localtime
 
表头文件

#include
 
定义函数

time_t mktime(strcut tm * timeptr);
 
函数说明

mktime()用来将参数timeptr所指的tm结构数据转

换成从公元1970年1月1日0时0分0 秒算起至今的UTC时间

所经过的秒数。
 
返回值

返回经过的秒数。
 
范例

/* 用time()取得时间(秒数),利用localtime()
转换成struct tm 再利用mktine()将struct tm转换成原来的

秒数*/

  1. #include<time.h>
  2. main()
  3. {
  4. time_t timep;
  5. strcut tm *p;
  6. time(&timep);
  7. printf(“time() : %d \n”,timep);
  8. p=localtime(&timep);
  9. timep = mktime(p);
  10. printf(“time()->localtime()->mktime():%d\n”,timep);
  11. }

执行  time():974943297
time()->localtime()->mktime():974943297
 
 

settimeofday(设置目前时间)  
相关函数

time,ctime,ftime,gettimeofday
 
表头文件

#include
#include
 
定义函数

int settimeofday ( const struct timeval *tv,const

struct timezone *tz);
 
函数说明

settimeofday()会把目前时间设成由tv所指的结构

信息,当地时区信息则设成tz所指的结构。详细的说明请参

考gettimeofday()。注意,只有root权限才能使用此函数修改

时间。
 
返回值

成功则返回0,失败返回-1,错误代码存于errno。
 
错误代码  EPERM 并非由root权限调用settimeofday(),

权限不够。
EINVAL 时区或某个数据是不正确的,无法正确设置时间。
 
 

time(取得目前的时间)  
相关函数

ctime,ftime,gettimeofday
 
表头文件

#include
 
定义函数

time_t time(time_t *t);
 
函数说明

此函数会返回从公元1970年1月1日的UTC时间从

0时0分0秒算起到现在所经过的秒数。如果t 并非空指针的

话,此函数也会将返回值存到t指针所指的内存。
 
返回值

成功则返回秒数,失败则返回((time_t)-1)值,错误

原因存于errno中。
 
范例

    1. #include<time.h>
    2. main()
    3. {
    4. int seconds= time((time_t*)NULL);
    5. printf(“%d\n”,seconds);
    6. }

Linux c获取时间的更多相关文章

  1. linux shell获取时间

    获得当天的日期 date +%Y-%m-%d 输出: 2011-07-28 将当前日期赋值给DATE变量DATE=$(date +%Y%m%d) 有时候我们需要使用今天之前或者往后的日期,这时可以使用 ...

  2. Linux date 获取时间

    获取当前日期: ubuser@ubuser-OptiPlex-7010:~$ date +%Y_%m_%d2020_12_16 获取当前时间: ubuser@ubuser-OptiPlex-7010: ...

  3. linux@64 获取时间的性能评估

    听人说gettimeofday 在64bit下有缓存,速度很快,测试下了,感觉不对啊.. #include <time.h> #include <sys/time.h> #in ...

  4. shell获取时间的相关命令

    Linux shell获取时间和时间间隔(ms级别) 说明:在进行一些性能测试的时候,有时候我们希望能计算一个程序运行的时间,有时候可能会自己写一个shell脚本方便进行一些性能测试的控制(比如希望能 ...

  5. linux在shell中获取时间

    linux在shell中获取时间 获得当天的日期 date +%Y-%m-%d 输出: 2011-07-28 将当前日期赋值给DATE变量DATE=$(date +%Y%m%d) 有时候我们需要使用今 ...

  6. linux下获取微秒级精度的时间【转】

    转自:https://blog.csdn.net/u011857683/article/details/81320052 使用C语言在linux环境下获得微秒级时间 1. 数据结构 int getti ...

  7. Linux C 获取系统时间信息

    比如获取当前年份:               /* 获取当前系统时间 暂时不使用 ; ; time_t now; struct tm *timenow; time(&now); timeno ...

  8. Linux java Tomcat 项目中 new Date 获取时间 8小时 时差

    转载自: https://blog.csdn.net/liqinghuiyx/article/details/53333284 起因:在本地开发的WEB项目部署到Linux 下后,存入数据库的时间少了 ...

  9. 关于linux中的时间 时区问题

    本文部分来源于:  http://hi.baidu.com/peruke/blog/item/b8de06ec6a04583b27979132.html 系统是fedora: glibc实现了从RTC ...

随机推荐

  1. 分布式中为什么要加入redis缓存的理解

    面我们介绍了mybatis自带的二级缓存,但是这个缓存是单服务器工作,无法实现分布式缓存.那么什么是分布式缓存呢?假设现在有两个服务器1和2,用户访问的时候访问了1服务器,查询后的缓存就会放在1服务器 ...

  2. Docker Run 设置环境变量

    Docker Run We can then override the environment variables set in the Docker file when running the im ...

  3. 【算法笔记】B1021 个位数统计

    1021 个位数统计 (15 分) 给定一个 k 位整数 N=d​k−1​​10​k−1​​+⋯+d​1​​10​1​​+d​0​​ (0≤d​i​​≤9, i=0,⋯,k−1, d​k−1​​> ...

  4. [转] javascript 判断对象是否存在的10种方法总结

    [From] http://www.jb51.net/article/44726.htm Javascript语言的设计不够严谨,很多地方一不小心就会出错.举例来说,请考虑以下情况.现在,我们要判断一 ...

  5. 腾讯云(Linux)安装Redis。

    参考:https://blog.csdn.net/a575553272/article/details/79743802 指令:ps -ef | grep redis   查看启动后的进程.

  6. win10 安装MySQL8.0.11记录。

    参考了博客A:https://blog.csdn.net/m0_37788308/article/details/79965378 博客B:https://blog.csdn.net/fxbin123 ...

  7. Jquery 循环内间隔执行 异步执行

    <script type="text/javascript"> var arr = new Array(); var arrk = 0; jQuery(function ...

  8. spring对异步的支持

    spring中异步方法的配置 1.在web.xml文件中设置org.springframework.web.servlet.DispatcherServlet的async-supported属性为tr ...

  9. HDFS基本shell操作

    在客户端输入Hadoop fs,可以查看所有的,hadoop shell # -help [cmd] //显示命令的帮助信息,如: hadoop fs -help ls # -ls(r) <pa ...

  10. Docker_network相关指令

    docker network create创建docker网卡docker network create -d overlay --ip-range=192.168.2.0/24 --gateway= ...