C++中的日期和时间

在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 ) );

 
发布了11 篇原创文章 · 获赞 5 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/abigriver/article/details/1911913