Chinaunix首页 | 论坛 | 博客
  • 博客访问: 329505
  • 博文数量: 81
  • 博客积分: 4016
  • 博客等级: 上校
  • 技术积分: 800
  • 用 户 组: 普通用户
  • 注册时间: 2006-03-17 18:38
文章分类

全部博文(81)

文章存档

2016年(5)

2015年(2)

2010年(1)

2008年(1)

2007年(4)

2006年(68)

我的朋友

分类: LINUX

2006-03-17 18:57:00

时间和日期例程

UNIX内核提供的基本时间服务是国际标准时间公元19701100:00:00以来经过的秒数,这种秒数是以数据类型time_t表示的。我们称它们为日历时间。日历时间包括时间和日期。

UNIX在这方面与其他操作系统的区别是:(a)以国际标准时间而非本地时间计时;(b)可自动进行转换,例如变换到夏日制;(c)将时间和日期作为一个量值保存。

time函数返回当前时间和日期。

time.h中定义>>>

#ifndef _TIME_T

#define _TIME_T

typedef long time_t;

#endif

 

l         time_t time(time_t * tp);返回:若成功则为时间值,若出错则为- 1;

时间值作为函数值返回。如果参数非null,则时间值也存放在由tp指向的单元内。

其中四个函数l o c a l t i m em k t i m ec t i m es t r f t i m e都受到环境变量T Z的影响。如果定义了T Z,则这些函数将使用其值以代替系统默认时区。如果T Z定义为空串(亦即T Z = ),则使用国际标准时间。

 

在很多伯克利类的系统中,time(3)只是一个函数,它调用gettimeofday(2)系统调用。在SVR4中调用stime(2)函数,在伯克利类的系统中调用settimeofday(2)对内核中的当前时间设置初始值。与timestime函数相比,BSDgettimeofdaysettimeofday提供了更高的分辨率(微秒级)。这对某些应用很重要。

 

两个函数l o c a l t i m eg m t i m e将日历时间变换成以年、月、日、时、分、秒、周日表示的时间,并将这些存放在一个t m结构中。

struct tm { /* a broken-down time */

    int tm_sec; /* seconds after the minute: [0, 60] */

    int tm_min; /* minutes after the hour: [0, 59] */

    int tm_hour; /* hours after midnight: [0, 23] */

    int tm_mday; /* day of the month: [1, 31] */

    int tm_mon; /* month of the year: [0, 11] */

    int tm_year; /* years since 1900 */

    int tm_wday; /* days since Sunday: [0, 6] */

    int tm_yday; /* days since January 1: [0, 365] */

    int tm_isdst; /* daylight saving time flag: <0, 0, >0 */

};

秒可以超过5 9的理由是可以表示润秒。注意,除了月日字段,其他字段的值都以0开始。如果夏时制生效,则夏时制标志值为正;如果已非夏时制时间则为0;如果此信息不可用,则为负。

l         struct tm * gmtime(const time_t *tp);

l         struct tm *localtime(const time_t * tp); 两个函数返回:指向t m结构的指针

l o c a l t i m eg m t i m e之间的区别是: l o c a l t i m e将日历时间变换成本地时间(考虑到本地时区和夏时制标志),而g m t i m e则将日历时间变换成国际标准时间的年、月、日、时、分、秒、周日。

 

函数mktime以本地时间的年、月、日等作为参数,将其变换成t i m e _ t值。

l         time_t mktime(struct tm * tp); 返回:若成功则为日历时间,若出错则为- 1

 

a s c t i m ec t i m e函数产生形式的2 6字节字符串,a s c t i m e的参数是指向年、月、日等字符串的指针,而c t i m e的参数则是指向日历时间的指针。这与d a t e ( 1 )命令的系统默认输出形式类似:

Tue Jan 14 17:49:03 1992\n\0

l         char *asctime(const struct tm *t m p t r) ;

l         char *ctime(const time_t * c a l p t r) ;两个函数返回:指向n u l l结尾的字符串

 

最后一个时间函数是strftime,它是非常复杂的p r i n t f类的时间值函数。

l         size_t strftime(char * buf, size_t smax, const char * format, const struct tm * tp);

返回:若有空间,则存入数组的字符数,否则为0

最后一个参数是要格式化的时间值,由一个指向一个年、月、日、时、分、秒、周日时间值的指针说明。格式化结果存放在一个长度为m a x s i z e个字符的b u f数组中,如果b u f长度足以存放格式化结果及一个n u l l终止符,则该函数返回在b u f中存放的字符数(不包括n u l l终止符),否则该函数返回0

f o r m a t参数控制时间值的格式。如同p r i n t f函数一样,变换说明的形式是百分号之后跟一个特定字符。f o r m a t中的其他字符则按原样输出。两个连续的百分号在输出中产生一个百分号。与p r i n t f函数的不同之处是,每个变换说明产生一个定长输出字符串,在f o r m a t字符串中没有字段宽度修饰符。表中列出了2 1ANSI C规定的变换说明。

格式       说明                     例子

% a        缩写的周日名       T u e

% A        全周日名              T u e s d a y

% b        缩写的月名           J a n

% B       月全名                  J a n u a r y

% c        日期和时间           Tue Jan 14 19:40:30 1992

% d        月日:[01, 31]                                 1 4

% H       小时(每天2 4小时):[00, 23]               1 9

% I               小时(上、下午各1 2小时)          [01, 12] 0 7

% j         年日:[001, 366]                              0 1 4

% m       月:[01, 12]                                     0 1

% M      分:[00, 59]                                     4 0

% p        A M / P M                                         P M

% S        :[00, 61]                                        3 0

% U        星期日周数: [00, 53]                     0 2

% w       周日:[ 0 =星期日,6 ]                    2

% W      星期一周数: [00, 53]                     0 2

% x        日期                                                 0 1 / 1 4 / 9 2

% X       时间                                                 1 9 : 4 0 : 3 0

% y        不带公元的年:[00, 991]                  9 2

% Y        带公元的年                                       1 9 9 2

% Z       时区名                                              M S T

% U是相应日期在该年中所属周数,包含该年中第一个星期日的周是第一周。% W也是相应日期在该年中所属的周数,不同的是包含第一个星期一的周为第一周。

 

 

 

阅读(834) | 评论(0) | 转发(0) |
0

上一篇:Happy days

下一篇:配置tftp server小小结

给主人留下些什么吧!~~