分类: LINUX
2008-12-03 09:30:10
Unix的时间起点为GMT on January 1, 1970。MS-DOS开始于1980。
时间类型:time_t。linux中为long integer。
语法:
#include
time_t time(time_t *tloc);
time的返回值存储在tloc,。
实例:
# cat envtime.c
#include
#include
#include
#include
int main()
{
int i;
time_t
the_time;
for(i = 1; i
<= 10; i++) {
the_time =
time((time_t *)0);
printf("The time is %ld\n", the_time);
sleep(2);
}
exit(0);
}
运行结果:
# ./envtime
The time is 1228204398
The time is 1228204400
The time is 1228204402
The time is 1228204404
The time is 1228204406
The time is 1228204408
The time is 1228204410
The time is 1228204412
The time is 1228204414
The time is 1228204416
ISO/ANSI C使用difftime的结构。
#include
double difftime(time_t time1, time_t time2);
gmtime提供更精确的时间:
#include
struct tm *gmtime(const time_t timeval);
tm Member Description
int tm_sec Seconds, 0-61
int tm_min Minutes, 0-59
int tm_hour Hours, 0-23
int tm_mday Day in the month, 1-31
int tm_mon Month in the year, 0-11 (January = 0)
int tm_year Years since 1900
int tm_wday Day in the week, 0-6 (Sunday = 0)
int tm_yday Day in the year, 0-365
int tm_isdst Daylight savings in effect
实例:
# cat gmtime.c
#include
#include
#include
int main()
{
struct tm
*tm_ptr;
time_t
the_time;
(void)
time(&the_time);
tm_ptr = gmtime(&the_time);
printf("Raw time is %ld\n", the_time);
printf("gmtime gives:\n");
printf("date: %02d/%02d/%02d\n",
tm_ptr->tm_year, tm_ptr->tm_mon+1, tm_ptr->tm_mday);
printf("time: %02d:%02d:%02d\n",
tm_ptr->tm_hour, tm_ptr->tm_min, tm_ptr->tm_sec);
exit(0);
}
运行结果:
# ./gmtime
Raw time is 1228205755
gmtime gives:
date:
time: 08:15:55
输出的是:GMT (now known as Coordinated Universal Time, or UTC)时间,本地时间需要使用:
#include
struct
tm *localtime(const time_t *timeval);
把tm转换为time_t,可以使用mktime,如果转换不成功,返回-1。
#include
time_t
mktime(struct tm *timeptr);
需要更友好的输出,
#include
char
*asctime(const struct tm *timeptr);
char
*ctime(const time_t *timeval);
前者的输出类似:
后者的输出类似:
asctime(localtime(timeval))
实例:
# cat
ctime.c
#include
#include
#include
int
main()
{
time_t timeval;
(void)time(&timeval);
printf("The date is: %s",
ctime(&timeval));
exit(0);
}
#
./ctime
The
date is: Tue Dec 2 16:26:27 2008
Strftime函数可以提供更多的控制:
#include
size_t strftime(char *s, size_t maxsize, const char
*format, struct tm *timeptr);
Conversion Specifier Description
%a Abbreviated weekday name
%A Full weekday name
%b Abbreviated month name
%B Full month name
%c Date and time
%d Day of the month, 01-31
%H Hour, 00-23
%I Hour in 12-hour clock, 01-12
%j Day of the year, 001-366
%m Month of the year, 01-12
%M Minutes, 00-59
%p a.m. or p.m.
%S Seconds, 00-61
%u Day in the week, 1-7 (1 = Monday)
%U Week in the year, 01-53 (Sunday is the first day of the
week.)
%V Week in the year, 01-53 (Monday is the first day of the
week.)
%w Day in the week, 0-6 (0 = Sunday)
%x Date in local format
%X Time in local format
%y Year number less 1900
%Y Year
%Z Time zone name
%%
A % character
比如通常date的显示“Wed Dec
3 09:20:41 CST
Strptime可以帮助阅读日期,格式化和format类似,扫描字符串时和sscanf类似。Strptime的转换比strftime复杂,
#include
char
*strptime(const char *buf, const char *format, struct tm *timeptr);
实例:
# cat strftime.c
#define _XOPEN_SOURCE /* glibc2 needs this for strptime
*/
#include
#include
#include
#include
int main()
{
struct tm
*tm_ptr, timestruct;
time_t
the_time;
char buf[256];
char *result;
(void)
time(&the_time);
tm_ptr =
localtime(&the_time);
strftime(buf,
256, "%A %d %B, %I:%S %p", tm_ptr);
printf("strftime gives: %s\n", buf);
strcpy(buf,"Thu 26 July 2007, 17:53 will do fine");
printf("calling strptime with: %s\n", buf);
tm_ptr =
×truct;
result =
strptime(buf,"%a %d %b %Y, %R", tm_ptr);
printf("strptime consumed up to: %s\n", result);
printf("strptime gives:\n");
printf("date: %02d/%02d/%02d\n",
tm_ptr->tm_year % 100, tm_ptr->tm_mon+1, tm_ptr->tm_mday);
printf("time: %02d:%02d\n",
tm_ptr->tm_hour, tm_ptr->tm_min);
exit(0);
}
运行结果:
# ./strftime
strftime gives: Wednesday 03 December, 09:58 AM
calling strptime with: Thu 26 July 2007, 17:53 will do
fine
strptime consumed up to:
will do fine
strptime gives:
date:
time: 17:53