unix环境C编程之日期时间转换

1、理清概念

1.1、日历时间:

含义:国际标准时间1970年1月1日00:00:00以来经过的秒数。

数据类型:time_t。实际上是long的别名。

1.2、tm结构时间:

含义:结构化存放时间的数据结构,方便查看。ANSI C标准称使用tm结构的这种时间表示为分解时间(broken-down time)

数据类型:

struct tm

{

int  tm_sec;       /* 秒数,范围[0,60] */

int  tm_min;       /* 分钟,范围[0,59] */

int  tm_hour;      /* 小时,范围[0,23] */

int  tm_mday;    /* 日,范围[1,31] */

int  tm_mon;      /* 月,范围[0,11] */

int  tm_year;      /* 年,从1900年开始的年数,为实际年份-1900 */

int  tm_wday;     /* 星期,周日为0,范围[0,6] */

int  tm_yday;     /* 日,从每年1月1日开始的天数,范围[0,365] */

int  tm_isdst;      /* 夏令时标识符,实行夏令时的时候,tm_isdst为正,不实行是为0,不了解情况时为负 */

}

2、时间转换

2.1、时间转换函数

以下时间转换函数在time.h中定义 :

(1) time_t time(time_t *calptr);

功能:返回当前日期和时间。

参数:若calptr不为空,则返回的时间值也存放在calptr指向的单元内。

返回值:若成功则返回时间值,不成功则返回-1。

(2) struct tm * gmtime(const time_t *calptr);

功能:将日历时间转成国际标准时间的年、月、日、时、分、秒、周日。

参数:日历时间。

返回值:指向struct tm时间的指针。

(3) struct tm * localtime(const time_t *calptr);

功能:将日历时间转成本地时间(考虑到本地时区和夏时制标志)。

参数:日历时间。

返回值:指向struct tm时间的指针。

(4) time_t mktime(struct tm *tmptr);

功能:将时间结构数据转换成经过的秒数。

参数:tm结构时间。

返回值:日历时间。

(5) char *asctime(const struct tm *tmptr);

功能:将时间结构数据转换为相应的字符串(英文简写形式)。

参数:tm结构数据。

返回值:时间字符串。

(6) char *ctime(const time_t *calptr);

功能:将日历时间转成字符串。

参数:日历时间。

返回值:时间字符串。

(7) size_t strftime(char *restrict but, size_t maxsize,

const char *restrict format,

const struct tm *restrict tmptr);

功能:将时间结构数据转成格式化字符串。

参数:buf存放格式化的结果。maxsize为buf的长度(该长度需要保证能够存放字符串以及一个null终止符)。

format为格式化参数,类似printf的格式化。tmptr指向一个tm结构的时间数据。

返回值:若buf能够保存结构则返回存入数组的字符数(不包括null终止符),否则返回0。

2.2、转换关系图为:

(图中以虚线表示的四个函数localtime、mktime、ctime和strftime都受到环境变量TZ的影响)

3、strftime的转换说明


格式


说明


实例


%a


缩写的星期名


Thu


%A


全星期名


Thursday


%b


缩写的月名


Aug


%B


全月名


August


%c


日期和时间


Thu Aug 23 14:55:02 2001


%C


年/100 [00,99]


20


%d


十进制表示的每月的第几天 [01,31]


16


%D


月/天/年 [MM/DD/YY]


06/16/12


%e


十进制表示的每月的第几天 ,一位数前加空格[1,31]


10


%F


年-月-日 [YYYY-MM-DD]


2012-06-16


%g


ISO 8601使用基于周的年的后两位数字


12


%G


ISO 8601使用基于周的年


2012


%h


简写的月份名 ,与%b相同


Aug


%H


24小时制的小时 [00,23]


14


%I


12小时制的小时 [01,12]


02


%j


每年的第几天 [001,366]


235


%m


十进制的月 [01,12]


08


%M


分钟 [00,59]


55


%n


换行符

 

%p


AM/PM


PM


%r


本地时间:(12时制)


11:01:23 AM


%R


与“%H:%M”相同


11:01


%S


秒 [00,60]


02


%t


水平制表符

 

%T


与“%H:%M:%S”相同


11:01:23


%u


ISO 8601的星期,星期一为1,[1,7]


2


%U


周数 ,以周日为一周开始 [00,53]


33


%V


ISO 8601周数 [01,53]


07


%w


星期,星期天为0. [0,6]


4


%W


周数,以星期一为一周开始 [00,53]


34


%x


标准日期


06/16/12


%X


标准时间


14:55:02


%y


年份的后两位数字 [00,99]


12


%Y



2012


%z


ISO 8601格式的UTC偏移量


-0500


%Z


时区名


EST


%%


百分号


%

4、举例

代码:

[cpp] view plaincopy

  1. #include<stdio.h>
  2. #include<time.h>
  3. int main()
  4. {
  5. //获取当前日历时间
  6. time_t t;
  7. t = time(&t);
  8. printf("the current time of seconds:[%d], string is:[%s]\n",t, ctime(&t));
  9. //日历时间转成本地tm结构时间
  10. struct tm* tm_t = localtime(&t);
  11. char buf[100];
  12. strftime(buf, 100,"%F %T",tm_t);
  13. printf("get struct tm tm_t from seconds is:[%s]\n", buf);
  14. //tm结构时间转成日历时间
  15. time_t t1 = mktime(tm_t);
  16. printf("get seconds from struct tm:[%d]\n",t);
  17. //自定义tm结构时间
  18. struct tm tm_t1;
  19. tm_t1.tm_year=2012-1900;
  20. tm_t1.tm_mon=0;
  21. tm_t1.tm_mday=16;
  22. tm_t1.tm_hour=0;
  23. tm_t1.tm_sec=0;
  24. tm_t1.tm_min=0;
  25. strftime(buf, 100,"%F %T",&tm_t1);
  26. printf("the struct tm tm_t1 is:[%s]\n", buf);
  27. }

结果:

the current time of seconds:[1339819819], string is:[Fri Jun 15 21:10:19 2012
]
get struct tm tm_t from seconds is:[2012-06-15 21:10:19]
get seconds from struct tm:[1339819819]
the struct tm tm_t1 is:[2012-01-16 00:00:00]

说明:

1、ctime得到的字符串有换行符

2、tm结构的tm_year为从1900开始的年数

2、tm结构的tm_mon为0时表示1月

时间: 2024-08-26 12:45:22

unix环境C编程之日期时间转换的相关文章

Unix 环境高级编程 (APUE) 之 网络 IPC:套接字

一起学 Unix 环境高级编程 (APUE) 之 网络 IPC:套接字 . . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编程 (APUE) 之 文件和目录 (四) 一起学 Unix 环境高级编程 (APUE) 之 系统数据文件和信息 (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境 (六) 一起学 Unix 环境高级编程 (APU

《UNIX环境高级编程(第3版)》

<UNIX环境高级编程(第3版)> 基本信息 原书名:Advanced Programming in the UNIX Environment (3rd Edition) (Addison-Wesley Professional Computing Series) 原出版社: Addison-Wesley Professional 作者: (美)W. Richard Stevens    Stephen A. Rago 译者: 戚正伟 张亚英 尤晋元 出版社:人民邮电出版社 ISBN:9787

(十三) [终篇] 一起学 Unix 环境高级编程 (APUE) 之 网络 IPC:套接字

. . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编程 (APUE) 之 文件和目录 (四) 一起学 Unix 环境高级编程 (APUE) 之 系统数据文件和信息 (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境 (六) 一起学 Unix 环境高级编程 (APUE) 之 进程控制 (七) 一起学 Unix 环境高级编程 (APUE)

Linux - Unix环境高级编程(第三版) 代码编译

Unix环境高级编程(第三版) 代码编译 本文地址:http://blog.csdn.net/caroline_wendy 时间:2014.10.2 1. 下载代码:http://www.apuebook.com/code3e.html 2. 安装依赖库:sudo apt-get install libbsd-dev  3. 进入下载目录make 4. 复制头文件和动态链接库 sudo cp ./include/apue.h /usr/include/ sudo cp ./lib/libapue

【转】apue《UNIX环境高级编程第三版》第一章答案详解

原文网址:http://blog.csdn.net/hubbybob1/article/details/40859835 大家好,从这周开始学习apue<UNIX环境高级编程第三版>,在此,我要感谢网易的一个工程师朋友和室友,没有他们,我不会开始真正的学习这本书,希望大家以后开始慢慢进步.废话少说,直接上课后习题了. UNIX高级编程第一章习题答案: 1.1在系统上验证,除根目录外,目录l和l l是不同的. 答:这个验证有很多方法可使用命令ls .cd.vim等,目录.指向当前目录,目录..指

《Unix环境高级编程》读书笔记 第7章-进程环境

1. main函数 int main( int argc, char *argv[] ); argc是命令行参数的数目,包括程序名在内 argv是指向参数的各个指针所构成的数组,即指针数组 当内核执行C程序时(使用exec函数),在调用main前先调用一个特殊的启动例程.可执行程序文件将此启动例程指定为程序的起始地址——这是由连接器设置的,而连接器则是由C编译器调用.启动例程从内核取得命令行参数和环境变量值,然后按上述方式调用main函数做好安排. 2. 进程终止 有8种方式使进程终止,其中5种

unix环境高级编程基础知识之第二篇(3)

看了unix环境高级编程第三章,把代码也都自己敲了一遍,另主要讲解了一些IO函数,read/write/fseek/fcntl:这里主要是c函数,比较容易,看多了就熟悉了.对fcntl函数讲解比较到位,它可以得到和改变打开文件的属性(只读,只写等等,注意后面和stat区别),下面记录了自己在学习的时候一些命令及概念,供学习使用: ls 命令的含义是list显示当前目录中的文件名字.注意不加参数它显示除隐藏文件外的所有文件及目录的名字. 1)ls –a 显示当前目录中的所有文件,包含隐藏文件. 2

unix环境高级编程基础知识之第一篇

陆陆续续看完了圣经第一章,熟悉了unix的整个编程流程,c语言的用处在这里得到伸张. 从unix的体系结构,原来操作系统包括内核及一些其他软件,我们常常误称为linux内核为操作系统,这俨然成为一种共识.基本熟悉了shell的介绍,主流的是bash(Bourne-again shell),unix的文件的基本操作,出错处理,用户ID,信号(感觉类似windows的消息),时间值,最后还有系统调用和库函数的区别. 自己把这篇的所有代码用vim的敲完了,主要前期是熟悉unix的基本命令编程,大致了解

(十二) 一起学 Unix 环境高级编程 (APUE) 之 进程间通信(IPC)

. . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编程 (APUE) 之 文件和目录 (四) 一起学 Unix 环境高级编程 (APUE) 之 系统数据文件和信息 (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境 (六) 一起学 Unix 环境高级编程 (APUE) 之 进程控制 (七) 一起学 Unix 环境高级编程 (APUE)