#include <stdio.h>
#include <stddef.h>
#include <time.h>
int main(void)
{
//4A5C84BC
time_t timer;
struct tm *tblock;
timer = 0x02000000;
//timer = time(NULL);
printf("%08X/n",timer);
tblock = localtime(&timer);
printf("Local time is: %s/n",asctime(tblock));
return 0;
}
localtime
函数名: localtime
功 能: 把从1970-1-1零点零分到当前时间系统所偏移的秒数时间转换为日历时间
用 法: struct tm *localtime(const time_t *clock);
程序例:
#include <stdio.h>
#include <stddef.h>
#include <time.h>
int main(void)
{
time_t timer;
struct tm *tblock;
timer = time(NULL);
tblock = localtime(&timer);
printf("Local time is: %s/n",asctime(tblock));
return 0;
}
执行结果:
Local time is: Mon Feb 16 11:29:26 2009
-----------------------------------------------------------------------------------------------------------------------------------
gmtime
gmtime()是把日期和时间转换为格林威治(GMT)时间的函数
头文件:TIME.H
原形:struct tm *gmtime(long *clock);
例:
#include "stdio.h"
#include "time.h"
#include "stdlib.h"
int main(void)
{
time_t t;
struct tm *gmt, *area;
tzset(); /* tzset()*/
t = time(NULL);
area = localtime(&t);
printf("Local time is: %s", asctime(area));
gmt = gmtime(&t);
printf("GMT is: %s", asctime(gmt));
return 0;
}
localtime和gmtime这两个函数采用了time.h中的一个tm结构体:
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]*/
#ifdef __USE_BSD
long int tm_gmtoff; /* Seconds east of UTC. */
__const char *tm_zone; /* Timezone abbreviation. */
#else
long int __tm_gmtoff; /* Seconds east of UTC. */
__const char *__tm_zone; /* Timezone abbreviation. */
#endif
};
这两个函数的原型为:
struct tm *localtime(const time_t *timep);
struct tm *gmtime(const time_t *timep);
具体实现为:
localtime.c
---------------------------------------------------------
#include <stdio.h>
#include <time.h>
void cur_time(void);
int main(int argc,char **argv)
{
cur_time();
return 0;
}
void cur_time(void)
{
char *wday[]={"星期天","星期一","星期二","星期三","星期四","星期五","星期六"};
time_t timep;
struct tm *p;
time(&timep);
p=localtime(&timep); /* 获取当前时间 */
printf("%d年%02d月%02d日",(1900+p->tm_year),
(1+p->tm_mon),p->tm_mday);
printf("%s
%02d:%02d:%02d/n",wday[p->tm_wday],p->tm_hour,p->tm_min,p->tm_sec);
}
---------------------------------------------------------
gcc localtime.c 后运行a.out结果为:
2007年12月26日星期三 11:07:15
gmtime.c
---------------------------------------------------------
#include <stdio.h>
#include <time.h>
void cur_time(void);
int main(int argc,char **argv)
{
cur_time();
return 0;
}
void cur_time(void)
{
char *wday[]={"星期天","星期一","星期二","星期三","星期四","星期五","星期六"};
time_t timep;
struct tm *p;
time(&timep);
p=gmtime(&timep); /* 获取当前时间 */
printf("%d年%02d月%02d日",(1900+p->tm_year),
(1+p->tm_mon),p->tm_mday);
printf("%s
%02d:%02d:%02d/n",wday[p->tm_wday],(p->tm_hour+8),p->tm_min,p->tm_sec);
}
-----------------------------------------------------------
gcc gmtime.c 后运行a.out结果为:
2007年12月26日星期三 11:08:34
---------------------------------------------------------------------------------------------------------------------------------
ctime
函数名: ctime
功 能: 把日期和时间转换为字符串
用 法: char *ctime(const time_t *time);
程序例:
#include
#include
int main(void)
{
time_t t;
time(&t);
printf("Today's date and time: %s/n", ctime(&t));
return 0;
}
------------------------------------------------------------------------
若在linux下使用本函数,需要include <time.h>头文件
-----------------------------------------------------------------------------------------------------------------------------------
difftime
功 能: 计算两个时刻之间的时间差
用 法: double difftime(time_t time2, time_t time1);
程序例:
#include <time.h>
#include <stdio.h>
#include <dos.h>
#include <conio.h>
int main(void)
{
time_t first, second;
clrscr();
first = time(NULL); /* Gets system
time */
delay(2000); /* Waits 2 secs */
second = time(NULL); /* Gets system time
again */
printf("The difference is: %f /
seconds/n",difftime(second,first));
getch();
return 0;
}
---------------------------------------------------------------------------------------------------
“函数原型
time_t time(time_t *timer);
函数说明
返回当前日历时间。值的编码方法是未指定的。如果日历时间不可用,则返回值(time_t)(-1)。如果参数timer不是空指针,则返回值也将存储到
timer所指向的对象中。”
那是什么原因导致time(NULL)返回的错误的值呢?上面说的日历时间不可用是什么意思,什么时候会导致日历时间不可用?
skyxie»
你看的那个是linux/unix平台的说明吧~
MSDN中:
"Return the time as seconds elapsed since midnight, January 1, 1970. There
is no error return.
"
请确认你的 mysavesturct.time 都被初始化了~ 如果没有初始化就存储, 就会出现1970.1.1
zteclx»
应该是变量没有初始化,很多新手都爱这样错。严格按软件工程来做
----------------------------------------------------------------------------------------------------
函数的
原型:
struct
tm *localtime(const time_t *timep);
struct
tm *gmtime
(const
time_t *timep);
头文件
:
#include <time.h>
函数说
明:
gmtime
()
将参数
timep
所
指的
time_t
结构中的信息转换成真实世界所使用的时间日期格式,然后将结果由结构
tm
返
回。结构
tm
的定义为
struct
tm
{
int
tm_sec;
/*0-59
的秒数
*/
int
tm_min;
/* 0-59
的分
数
*/
int
tm_hour;
/* 0-23
的小时数
*/
int
tm_mday;
/*1-31
的日期数
*/
int
tm_mon;
/*0-11
的月数
*/
int
tm_year;
/* 1900~
至今的
年数
*/
int
tm_wday;
/*0-6
的星期数
*/
int
tm_yday;
/*0-365
的天数
*/
int
tm_isdst;
/*
日光节约时间的旗标
*/
};
返回值
:
此函数返回未经时区转换的
UTC
时间结构
tm
例
:
#include
"stdio.h"
#include
"time.h"
#include
"stdlib.h"
int
main(void)
{
time_t
t;
struct
tm *gmt, *area;
tzset();
/* tzset()*/
t =
time(NULL);
area
= localtime(&t);
printf("Local
time is: %s", asctime(area));
gmt =
gmtime
(&t);
printf("GMT
is: %s", asctime(gmt));
return
0;
}
具体实现为:
localtime.c
---------------------------------------------------------
#include
<stdio.h>
#include
<time.h>
void
cur_time(void);
int
main(int argc,char **argv)
{
cur_time();
return
0;
}
void
cur_time(void)
{
char
*wday[]={"
星期天
","
星期一
","
星
期二
","
星期三
","
星期四
","
星
期五
","
星期六
"};
time_t
timep;
struct
tm *p;
time(&timep);
p=localtime(&timep);
/*
获取当前时间
*/
printf("%d
年
%02d
月
%02d
日
",(1900+p->tm_year),(1+p->tm_mon),p->tm_mday);
printf("%s
%02d:%02d:%02d/n",wday[p->tm_wday],p->tm_hour,p->tm_min,p->tm_sec);
}
---------------------------------------------------------
gcc
localtime.c
后运行
a.out
结果为:
2007星
期三
年
12
月
26
日
11:07:15
gmtime
.c
---------------------------------------------------------
#include
<stdio.h>
#include
<time.h>
void
cur_time(void);
int
main(int argc,char **argv)
{
cur_time();
return
0;
}
void
cur_time(void)
{
char
*wday[]={"
星期天
","
星期一
","
星
期二
","
星期三
","
星期四
","
星
期五
","
星期六
"};
time_t
timep;
struct
tm *p;
time(&timep);
p=gmtime
(&timep);
/*
获取当前时间
*/
printf("%d
年
%02d
月
%02d
日
",(1900+p->tm_year),(1+p->tm_mon),p->tm_mday);
printf("%s
%02d:%02d:%02d/n",wday[p->tm_wday],(p->tm_hour+8),p->tm_min,p->tm_sec);
}
-----------------------------------------------------------
gcc gmtime
.c
后运行
a.out
结果为:
2007星
期三
年
12
月
26
日
11:08:34