日期和时间函数

21 篇文章 0 订阅


函数 说明
asctime()将时间日期以字符串格式表示
ctime()将时间日期以字符串格式表示
gettimeofday()获取当前时间(由秒和微秒组成)
gmtime()获取当前时间和日期
localtime()获取当前时间和日期并转换为本地时间
mktime()将时间转换成经过的秒数
settimeofday()设置当前时间戳
time()获取当前时间(以秒数表示)



1. asctime
 

头文件:#include <time.h>

定义函数: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. time_t timep;
  4. time (&timep);
  5. printf("%s", asctime(gmtime(&timep)));
  6. }

执行
Sat Oct 28 02:10:06 2000


2. ctime

头文件:#include <time.h>

定义函数: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. time_t timep;
  4. time (&timep);
  5. printf("%s", ctime(&timep));
  6. }

执行
Sat Oct 28 10 : 12 : 05 2000

3. gettimeofday

头文件:#include <sys/time.h>    #include <unistd.h>

定义函数: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

4. gmtime

头文件:#include <time.h>

定义函数:struct tm *gmtime(const time_t *timep);

函数说明:gmtime()将参数timep 所指的time_t 结构中的信息转换成真实世界所使用的时间日期表示方法,然后将结果由结构tm 返回。

结构tm 的定义为

   
   
  1. struct tm{
  2. int tm_sec; //代表目前秒数, 正常范围为0-59, 但允许至61 秒
  3. int tm_min; //代表目前分数, 范围0-59
  4. int tm_hour; //从午夜算起的时数, 范围为0-23
  5. int tm_mday; //目前月份的日数, 范围01-31
  6. int tm_mon; //代表目前月份, 从一月算起, 范围从0-11
  7. int tm_year; //从1900 年算起至今的年数
  8. int tm_wday; //一星期的日数, 从星期一算起, 范围为0-6
  9. int tm_yday; //从今年1 月1 日算起至今的天数, 范围为0-365
  10. int tm_isdst; //日光节约时间的旗标
  11. };

此函数返回的时间日期未经时区转换,而是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->tm_mday);
  9. printf("%s%d;%d;%d\n", wday[p->tm_wday], p->tm_hour, p->tm_min, p->tm_sec);
  10. }

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

5. gmtime

头文件:#include <time.h>

定义函数:struct tm *gmtime(const time_t *timep);

函数说明:gmtime()将参数timep 所指的time_t 结构中的信息转换成真实世界所使用的时间日期表示方法,然后将结果由结构tm 返回。

结构tm 的定义为

   
   
  1. struct tm{
  2. int tm_sec; //代表目前秒数, 正常范围为0-59, 但允许至61 秒
  3. int tm_min; //代表目前分数, 范围0-59
  4. int tm_hour; //从午夜算起的时数, 范围为0-23
  5. int tm_mday; //目前月份的日数, 范围01-31
  6. int tm_mon; //代表目前月份, 从一月算起, 范围从0-11
  7. int tm_year; //从1900 年算起至今的年数
  8. int tm_wday; //一星期的日数, 从星期一算起, 范围为0-6
  9. int tm_yday; //从今年1 月1 日算起至今的天数, 范围为0-365
  10. int tm_isdst; //日光节约时间的旗标
  11. };

此函数返回的时间日期未经时区转换,而是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->tm_mday);
  9. printf("%s%d;%d;%d\n", wday[p->tm_wday], p->tm_hour, p->tm_min, p->tm_sec);
  10. }

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


6. mktime

头文件:#include <time.h>

定义函数:time_t mktime(strcut tm * timeptr);

函数说明:mktime()用来将参数timeptr 所指的tm 结构数据转换成从公元1970 年1 月1 日0 时0 分0 秒算起至今的UTC 时间所经过的秒数。

返回值:返回经过的秒数。

范例:用time()取得时间 (秒数), 利用localtime() 转换成struct tm 再利用mktine()将structtm 转换成原来的秒数。

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

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

7. settimeofday

头文件:#include <sys/time.h>    #include <unistd.h>

定义函数:int settimeofday(const struct timeval *tv, const struct timezone *tz);

函数说明:settimeofday()会把目前时间设成由tv 所指的结构信息,当地时区信息则设成tz 所指的结构。详细的说明请参考gettimeofday()。

注意,在Linux下,只有root 权限才能使用此函数修改时间。

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

错误代码:
EPERM  并非由root 权限调用settimeofday(),权限不够。
EINVAL  时区或某个数据是不正确的,无法正确设置时间。

8. time

头文件:#include <time.h>

定义函数: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. int seconds = time((time_t*)NULL);
  4. printf("%d\n", seconds);
  5. }

执行结果:
9.73E+08

函数 说明
asctime()将时间日期以字符串格式表示
ctime()将时间日期以字符串格式表示
gettimeofday()获取当前时间
gmtime()获取当前时间和日期
localtime()获取当前时间和日期并转换为本地时间
mktime()将时间转换成经过的秒数
settimeofday()设置当前时间戳
time()获取当前时间(以秒数表示)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值