对ctime和astime的理解

用同一块buffer,通过下面两个程序测试出来.
#include <iostream>;
#include <time.h>;
using namespace std;
int main()
{
time_t now;
char * ptime;
if(time(&now)<0)
{
cout << "error\n" << endl;
exit(-1);
}
#ifdef _AIX
ptime = asctime(gmtime((time_t *)&now));
#else
ptime = asctime(gmtime((long *)&now));
#endif
cout << now << endl;
cout << ctime(&now) << endl;
cout << now << endl;
cout << ptime << endl;
printf("haha\n ");
return 0;
}
#include <iostream>;
#include <time.h>;
using namespace std;
int main()
{
time_t now;
char * ptime;
if(time(&now)<0)
{
cout << "error\n" << endl;
exit(-1);
}
cout << now << endl;
cout << ctime(&now) << endl;
#ifdef _AIX
ptime = asctime(gmtime((time_t *)&now));
#else
ptime = asctime(gmtime((long *)&now));
#endif
cout << now << endl;
cout << ptime << endl;
printf("haha\n ");
return 0;
}
localtime()和gmtime()之间的区别是:localtime将日历时间转换成本地时间(考虑到本地时区和夏时制标志),而gmtime则将日历时间转换成国际标准时间的年、月、日、时、分、秒、周日。它们的定义如下:

 struct tm* gmtime(const time_t* mem);
 struct tm* localtime(const time_t* mem);

 函数mktime()则正好相反,它是以存放有本地时间年、月、日等的tm结构作为参数,将其转换成time_t类型的秒值。mktime()函数的定义是:

  time_t mktime(struct tm* tmptr); //成功返回日历时间,失败则返回-1

 函数asctime()和ctime()可以获得人们可读的时间字符串,表示形式如同使用date命令所获得的系统默认的时间输出形式。它们的定义如下:

  char* asctime(const struct tm* tmptr);//参数是指向存放有本地时间年、月、日等的tm结构的指针
 char* ctime(const time_t* mem); //参数是指向日历时间的指针

 函数strftime()是最为复杂的时间函数,可用于用户自定义时间的表示形式。函数strftime()的定义如下:

 size_t strftime(char* buf, size_t maxsize, const char* format,
const struct tm* tmptr); //有空间则返回所存入数组的字符数,否则为0

自 定义格式的结果存放在一个长度为maxsize的buf数组中,如果buf数组长度足以存放格式化结果及一个null终止符,则该函数返回在buf数组中 存放的字符数(不包括null终止符),否则该函数返回0。format参数用于控制自定义时间的表示格式,格式的定义是在百分号之后跟一个特定字符, format中的其他字符则按原样输出。其中特别应注意的是,两个连续的百分号则是表示输出一个百分号。常用的定义格式如下表所示。
格式
说明
例子
% a
缩写的周日名
Tue
% A
全周日名
Tuesday
% b
缩写的月名
Jan
% B
月全名
January
% c
日期和时间
Wed Aug 17 19:40:30 2005
% d
月日:[01, 31]
14
% H
小时(每天2 4小时):[00, 23]
19
% I
小时(上、下午各1 2小时[01, 12]
07
% j
年日:[001, 366]
014
% m
月:[01, 12]
01
% M
分:[00, 59]
40
% p
A M / P M
PM
% S
秒:[00, 61]
30
% U
星期日周数:[00, 53]
02
% w
周日:[ 0 =星期日,6 ]
2
% W
星期一周数:[00, 53]
02
% x
日期
08/17/05
% X
时间
19:40:30
% y
不带公元的年:[00, 991]
05
% Y
带公元的年
2005
% Z
时区名
MST

你可能感兴趣的:(J#,AIX)