使用gmtime函数或localtime函数将time_t类型的时间日期转换为structtm类型:

使用time函数返回的是一个long值,该值对用户的意义不大,一般不能根据其值确定具体的年、月、日等数据。gmtime函数可以方便的对time_t类型数据进行转换,将其转换为tm结构的数据方便数据阅读。

gmtime函数的原型如下:

struct tm *gmtime(time_t*timep);

localtime函数的原型如下:

struct tm *localtime(time_t*timep);

将参数timep所指的time_t类型信息转换成实际所使用的时间日期表示方法,将结果返回到结构tm结构类型的变量。

gmtime函数用来存放实际日期时间的结构变量是静态分配的,每次调用gmtime函数都将重写该结构变量。如果希望保存结构变量中的内容,必须将其复制到tm结构的另一个变量中。

gmtime函数与localtime函数的区别:

gmtime函数返回的时间日期未经时区转换,是UTC时间(又称为世界时间,即格林尼治时间)。

localtime函数返回当前时区的时间,

转换日期时间表示形式time_t类型转换为structtm类型示例:

#include

#include

int main()

{

char*wday[]={"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};/*指针字符数组*/

time_t t;

struct tm *p;

t=time(NULL);/*获取从1970年1月1日零时到现在的秒数,保存到变量t中*/

p=gmtime(&t); /*变量t的值转换为实际日期时间的表示格式*/

printf("%d年%02d月%02d日",(1900+p->tm_year),(1+p->tm_mon),p->tm_mday);

printf(" %s ", wday[p->tm_wday]);

printf("%02d:%02d:%02d\n", p->tm_hour,p->tm_min, p->tm_sec);

return 0;

}

注意:p=gmtime(&t);此行若改为p=localtime(&t);则返回当前时区的时间

②     使用mktime函数将structtm类型的时间日期转换为time_t类型:

表头文件

#include

定义函数

time_t mktime(strcut tm *timeptr);

函数说明

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

返回值

返回经过的秒数。

日期转换为秒数示例:

#include

#include

int main()

{

time_t t;

struct tm stm;

printf("请输入日期时间值(按yyyy/mm/dd hh:mm:ss格式):");

scanf("%d/%d/%d%d:%d:%d",&stm.tm_year,&stm.tm_mon,&stm.tm_mday,

&stm.tm_hour,&stm.tm_min,&stm.tm_sec);

stm.tm_year-=1900; /*年份值减去1900,得到tm结构中保存的年份序数*/

stm.tm_mon-=1;    /*月份值减去1,得到tm结构中保存的月份序数*/

t=mktime(&stm);  /* 若用户输入的日期时间有误,则函数返回值为-1*/

if(-1==t)

{

printf("输入的日期时间格式出错!\n");

exit(1);

}

printf("1970/01/01 00:00:00~%d/%02d/%02d%02d:%02d:%02d共%d秒\n",

stm.tm_year+1900,stm.tm_mon,stm.tm_mday,

stm.tm_hour,stm.tm_min,stm.tm_sec,t);

return 0;

}

转:http://www.360doc.com/content/11/0720/14/1317564_134702417.shtml

C语言中两种方式表示时间日期值time_t和struct tm类型的相互转换的更多相关文章

  1. R语言两种方式求指定日期所在月的天数

                 R语言两种方式求指定日期所在月的天数 days_monthday<-function(date){ m<-format(date,format="%m& ...

  2. 【C语言】两种方式实现冒泡排序算法

    题目要求 编写一个C语言程序,实现基本的冒泡排序算法. 算法 冒泡排序,用一句话来总结: 一组数中,相邻的两个数进行比较.交换,将最大(小)数交换至尾(首)部,即完成了一次冒泡排序 要想对N个数字进行 ...

  3. python flask学习第2天 URL中两种方式传参

    新创建项目   自己写个url映射到自定义的视图函数 在url中传递参数 app.py from flask import Flask app = Flask(__name__) @app.route ...

  4. Java语言中两种异常的差别

    Java提供了两类主要的异常:runtime exception和checked exception.所有的checked exception是从java.lang.Exception类衍生出来的,而 ...

  5. 浅析Java语言中两种异常的差别

    Java提供了两类主要的异常:runtime exception和checked exception.所有的checked exception是从java.lang.Exception类衍生出来的,而 ...

  6. android中两种方式打开网页

    一.你要打开一个网页你可以自己写一个webview,在自己的程序中就可以打开. wv = (WebView) findViewById(R.id.webView1); wv.getSettings() ...

  7. Pytho中两种方式导入模块的差别

    1.使用import module,只是把模块导入,访问模块中的函数名或者是属性是必须使用点运算符(.)来访问,否则直接访问会提示找不到这些函数或者属性. 2.使用from numpy import ...

  8. android两种方式获取AsyncTask返回值

    获取AsyncTask返回值,在Activity中使用. 引用链接:https://www.oschina.net/code/snippet_725438_49858#72630 [1].[代码] [ ...

  9. 通过调用C语言的库函数与在C代码中使用内联汇编两种方式来使用同一个系统调用来分析系统调用的工作机制

    通过调用C语言的库函数与在C代码中使用内联汇编两种方式来使用同一个系统调用来分析系统调用的工作机制 前言说明 本篇为网易云课堂Linux内核分析课程的第四周作业,我将通过调用C语言的库函数与在C代码中 ...

随机推荐

  1. Linux--01入门

    一.远程控制台 Linux和windows不太一样,win系列默认都有桌面,我们买了服务器,一般都用远程桌面去连接. 而linux一般都是为了追求低成本或者高性能,可能我们就不需要桌面了,所以使用命令 ...

  2. View 的 focus 和 selected 状态, TabContainer实现

    View的 isFocusableInTouchMode() 默认是 false, 需调用 setFocusableInTouchMode(true) 才为true要让 button 等 view 调 ...

  3. <<软件测试实战>>读书笔记

    软件测试基础 软件的复杂度已经超越了人的理解能力 1. 虽然高抽象的层次语言,程序框架,程序库等提高了人的生产力,但是还是需要开发者深入理解细节,可以减少开发时间,但是无法减少开发者学习整个技术栈的时 ...

  4. <<测试驱动开发的艺术>>读书笔记

    TDD通过边测试边编写代码,然后重构来防止重构所引起的错误 通过自动化测试和持续集成工具,随时保持可以发布 TDD第一步: 1. 需求分解 2. 将需求转化成测试 3. 写一个失败的测试 4. 逐步通 ...

  5. 单例实现c++

    #include <iostream> using namespace std; class Singleton { public: static Singleton *GetInstan ...

  6. ARM-ContexM3/4组优先级和子优先级抢占规则

    多个中断源在它们的抢占式优先级相同的情况下,子优先级不论是否相同,如果某个中断已经在服务当中,则其它中断源都不能打断它:只有抢占式优先级高的中断才可以打断其它抢占式优先级低的中断. 就是说, 组优先级 ...

  7. Linux下lampp详解 (转)

    重要文件解释: ProFTPD:一个Unix平台上或是类Unix平台上(如Linux, FreeBSD等)的FTP服务器程序,它是在自由软件基金会的版权声明(GPL)下开发.发布的免费软件,可以随意修 ...

  8. SQL Server 树形表非循环递归查询

    很多人可能想要查询整个树形表关联的内容都会通过循环递归来查...事实上在微软在SQL2005或以上版本就能用别的语法进行查询,下面是示例.   --通过子节点查询父节点WITH  TREE AS(  ...

  9. 整整十年 - Agent Framework for TypeScript 2.0

    十年前,我发布了 Agent Framework for .NET 2.0 今天,Agent 又开始了新的旅程, 这次支持的语言是 TypeScript 2.0 上需求:init函数只能被调用一次 废 ...

  10. XE6 & IOS开发之开发者账号、苹果证书(1):关于开发者账号

    网上能找到的关于Delphi XE系列的移动开发的相关文章甚少,本文尽量以详细的图文内容.傻瓜式的表达来告诉你想要的答案. 原创作品,请尊重作者劳动成果,转载请注明出处!!! 关于苹果开发者账号, 注 ...