必威体育Betway必威体育官网
当前位置:首页 > IT技术

浅谈C/C++的time_t函数

时间:2019-06-21 19:44:15来源:IT技术作者:seo实验室小编阅读:78次「手机版」
 

1773dy

wordpress 博客链接:http://acmerbar.com/132.html

最近翻到《C专家编程》前言看到time_t函数,竟然一时之间全无概念,只是约莫知道是个有关时间的函数,这对已经学了C/C++的博主来说,简直是个嘲讽,本机测试了一下,大概是下面这个样子:

#include <iOStream>
#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <time.h>
using namespace std;
/*常用的时间函数: */
///将结构中的信息转换为真实世界的时间,以字符串的形式显示
char *asctime(const struct tm* timeptr);

///将timep转换为真实世界的时间,以字符串的形式显示,和asctime传入参数不一样
char *ctime(const time_t *timep);

///返回两个时间差的秒数
double difftime(time_t time1, time_t time2);

///返回当前距离1970年的秒数和微妙数,后面的tz是时区,一般不用
int get_time_of_day(struct timeval *tv,struct timezone *tz);

///将time_t表示的时间转换为没有经过时区转换的UTC时间,是一个struct tm结构指针
struct tm* gmtime(const time_t *timep);

///和gmtime类似,但是它是经过时区转换的时间。
struct tm* localtime(const time_t *timpe);

///将struct tm 结构的时间转换为从1970年至今的秒数
time_t mktime(struct tm* timeptr);

///取得从1970年1月1日至今的秒数。
time_t time(time_t *t);

int main()
{
    /*运行程序系统命令date显示本机时间为: Thu Nov 26 12:53:13 2015*/

    time_t biggest= 0x7fffffff; /// time_t所能表示的最大值
    printf("biggest= %s \n", ctime(&biggest));
    printf("biggest= %s \n", asctime(gmtime(&biggest)));

   /* 输出:
        biggest= Tue Jan 19 11:14:07 2038
        biggest= Tue Jan 19 03:14:07 2038
    我们发现整整差了8个小时,这是因为ctime()函数把参数转换为当地时间,跟世界统一时间UTC(格林尼治时间)并不一样
    取决于所在的时区,参照上面函数说明可以知道:
    gmtime()函数是将time_t表示的时间转换为没有经过时区转换的UTC时间,是一个struct tm结构指针
    */
  /*可以测试一下下面两个例子*/
    time_t timep;
    time(&timep);  ///获取time_t类型的当前时间
    printf("%s\n", asctime( gmtime(&timep)));
    /// 输出: Thu Nov 26 04:44:40 2015 ///没有经过时区转换的UTC时间

   time_t timep;
   time(&timep);
   printf("%s\n", ctime(&timep));
   ///输出: Thu Nov 26 12:53:13 2015   ///经过时区转换的UTC时间
    return 0;
}
经过其他测试,我们可以总结:

time,gmtime,asctime 所表示的时间都是UTC时间,只是数据类型不一样;

而localtime,ctime 所表示的时间都是经过时区转换后的时间,它和你用系统命令date所表示的CST时间应该保持一致。

相关阅读

C/C++ 学习笔记:istringstream、ostringstream、string

0、C++的输入输出分为三种:(1)基于控制台的I/O(2)基于文件的I/O(3)基于字符串的I/O 1、头文件[cpp] view plaincopyprint? #incl

摩尔斯电码翻译(C++实现)

#include <stdio.h>#include <string.h>//首先将摩斯电码的36个符号及其电码(1对应.,0对应-)记录在一个数组内char a[36][6] = { "

Windows10系统VC++6.0安装教程

VC++6.0的安装并不简单,所以我总结这篇博客让大家少费一些周折。网上找了好多下载地址都安装失败,最后安装成功的压缩包我放到网盘

C/C++ 之 fill ()的运用

fill()函数参数:fill(first,last,val); // first 为容器的首迭代器,last为容器的末迭代器,val为将要替换的值。 举例: int a[200]; f

c++ 名称空间

1.定义namespace 名称空间名{变量类型 变量;函数返回值类型 函数原型;}  在名称空间作用域内变量、函数原型被称为实体。实体在名

分享到:

栏目导航

推荐阅读

热门阅读