在C++中, 要得到当前系统的日期和时间,可以使用time函数.
time函数的声明在time.h中,它需要一个参数,类型是time_t类型. 我们打开time.h可以看到,
所谓的time_t只不过是一个long. typedef long time_t;
time函数的声明如下:
time_t time( time_t *time )
使用时,通常不用返回值, 而是传递一个参数, 因为传递的是地址, 所以, time函数可以在函数中改变实参的指向. 如:
time_t *clock=new time_t;
time(clock); //clock指向的内存单元中存放的是 "日期时间" 的整型表示(叫日历时间,calendar time ).
这时,输出 clock,还看不明白. 还需要把clock转换为我们好理解的格式:
用ctime函数. ctime函数的原型: char *ctime( const time_t *time );
所以, 可以得到一个字符串, char *s=ctime(clock); cout<<s; 如, 在我的VC中输出为:
Thu Nov 12 13:30:04 2007
依次为: 星期 月 日 时分秒 年
方法2:
很多时候我们并不需要这样的格式,我们只是想得到其中的一些值,如年,月,日等,然后自己处理,这时, 可以使用localtime函数
函数原型为: struct tm *localtime( const time_t *time );
它把日历时间转换为本地时间, 但返回值是一个结构体. 我们来看看, 在time.h中:
struct tm
{
int tm_sec; /* Seconds: 0-59 (K&R says 0-61?) */
int tm_min; /* Minutes: 0-59 */
int tm_hour; /* Hours since midnight: 0-23 */
int tm_mday; /* Day of the month: 1-31 */
int tm_mon; /* Months *since* january: 0-11 */
int tm_year; /* Years since 1900 */
int tm_wday; /* Days since Sunday (0-6) */
int tm_yday; /* Days since Jan. 1: 0-365 */
int tm_isdst; /* +1 Daylight Savings Time, 0 No DST, -1 don't know */
};
很简单, 其中要注意的是:
星期是从星期天开始, 即:0表示星期天. 还有个tm_yday, 表示从1月1号到现在的天数,值的范围从0~365
年,是从1900年算,到现在的数字,而月份从0开始的. 所以,要稍加变换.如:要求当前年月日
tm *mytime=new tm; //定义一个结构体指针,C++中可以不要struct,但C语言必须写成: struct tm *mytime
time_t *aclock=new time_t; //定义 time_t 指针
time(clock); // 得到日历时间
mytime=localtime(aclock); //得到本地时间
int year=1900+mytime->tm_year;
int month=mytime->tm_mon+1;
int day=mytime->tm_mday;
......
如果想进一步得到前面ctime的格式,可以用asctime: 即 asctime(mytime); 也返回一个字符串
即: ctime 相当于 asctime( localtime( tp ) );