《unix高级环境编程》系统数据文件和信息——时间和日期

       unix内核的基本服务时间是计算自国际标准时间公元1970年1月1日00:00:00以来经过的秒数,以时间类型time_t表示。以下根据时间的不同显示进行记录各种时间函数。

当前时间time

/* time函数. */
/***
 * 函数功能:返回当前时间和日历。
 * 返回值:若成功则返回时间值,若出错则返回-1。
 * 函数原型:
 * **/
  #include <time.h>
  time_t time(time_t *calptr);
 /* 说明:
 * 若参数calptr非空,则返回的时间值存储在calptr所指的单元内;
 * ***/
       上面time时间函数的返回值的日历时间,即是time_t类型的秒数,接下来是以普通显示的时间,就是我们平常接触的时间显示方式:年、月、日、时、分、秒。先看下这种时间显示结构信息:

/* tm structure.  */
struct tm
{
  int tm_sec;			/* Seconds.	[0-60] (1 leap second) */
  int tm_min;			/* Minutes.	[0-59] */
  int tm_hour;			/* Hours.	[0-23] */
  int tm_mday;			/* Day.		[1-31] */
  int tm_mon;			/* Month.	[0-11] */
  int tm_year;			/* Year	- 1900.  */
  int tm_wday;			/* Day of week.	[0-6] */
  int tm_yday;			/* Days in year.[0-365]	*/
  int tm_isdst;			/* DST.		[-1/0/1]*/
};
       将日历时间time_t转换为可读时间的函数分别是localtime和gmtime函数,这两个函数的区别是:localtime将日历时间转换为当地时间;gmtime将日历时间转换为国际标准时间;注:这里的可读时间是指我们一般使用的年月日时分秒;

/* 将日历时间转换为可读日期 */

/* localtime 和 gmtime 函数 */
/**
 * 函数功能:将时间秒转换为可读日期;
 * 返回值:返回指向tm结构的指针;
 * 函数原型:
 * Return the `struct tm' representation of *TIMER
   in Universal Coordinated Time (aka Greenwich Mean Time).*/ 
 struct tm *gmtime (const time_t *timer);

/* Return the `struct tm' representation
   of *TIMER in the local timezone.  */
 struct tm *localtime (const time_t *timer);
 /**
  * 区别:localtime返回的是当地时间;gmtime返回的是国际时间;
  * ***/
      mktime函数是将可读时间转换为日历时间time_t

 /** 将可读时间转换为time_t时间 */
 time_t mktime(struct tm *tmptr);
 /* 返回值:若成功则返回日历时间,若出错则返回-1 */
       以字符串显示时间的函数:asctime和ctime函数

 /* 以字符串显示时间的函数 */
 /**
  * 函数功能:以字符串显示的时间;
  * 返回值:指向以NULL结尾的字符串指针;
  * 函数原型:
  * */
/* Return a string of the form "Day Mon dd hh:mm:ss yyyy\n"
   that is the representation of TP in this format.  */
 char *asctime (const struct tm *tp);

/* Equivalent to `asctime (localtime (timer))'.  */
 char *ctime (const time_t *timer);
       以格式化显示时间的函数

/* Format TP into buf according to FORMAT.
   Write no more than MAXSIZE characters and return the number
   of characters written, or 0 if it would exceed MAXSIZE.  */
 size_t strftime (char *restrict buf, size_t maxsize,
			const char *restrict format,
			const struct tm *restrict tp);
/**
 * 说明:
 * 时间tp以格式format形式存放在大小为maxsize的缓冲数组buf中。
 * 返回存在buf中字符数,不包括null字符;
 * **/
测试程序:

#include <time.h>
#include <stdio.h>
#include "apue.h"
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <utime.h>

int main(void)
{
    time_t T;
    char *ptr;
    struct tm *time1, *time2;
    T = time(NULL);
    printf("time_t format:%ld\n",T);
    time1 = localtime(&T);
    ptr = asctime(time1);
    printf("localtime format:%s\n",ptr);
    time2 = gmtime(&T);
    ptr = asctime(time2);
    printf("gmtime format:%s\n",ptr);
    ptr = ctime(&T);
    printf("ctime format:%s\n",ptr);
    T = mktime(time1);
    printf("mktime format:%ld\n",T);
    exit(0);
}
输出:

time_t format:1415101627
localtime format:Tue Nov  4 19:47:07 2014

gmtime format:Tue Nov  4 11:47:07 2014

ctime format:Tue Nov  4 19:47:07 2014

mktime format:1415101627

参考资料:

《unix高级环境编程》

你可能感兴趣的:(系统时间,Unix高级环境编程)