您的位置:首页 > 编程语言 > C语言/C++

C语言的时间函数

2014-05-13 21:31 218 查看
下面是C语言的获取本地时间和构造时间进行格式化时间显示输出的相关函数:
This  page  is  part of release 3.35 of the Linux man-pages project.
#include <time.h>
       char *asctime(const struct tm *tm);
char *asctime_r(const struct tm *tm, char *buf);

char *ctime(const time_t *timep);
char *ctime_r(const time_t *timep, char *buf);

struct tm *gmtime(const time_t *timep);
struct tm *gmtime_r(const time_t *timep, struct tm *result);

struct tm *localtime(const time_t *timep);
struct tm *localtime_r(const time_t *timep, struct tm *result);

time_t mktime(struct tm *tm);
Broken-down  time  is  stored  in  the structure tm which is defined in
<time.h> as follows:

struct tm {
int tm_sec;         /* seconds */
int tm_min;         /* minutes */
int tm_hour;        /* hours */
int tm_mday;        /* day of the month */
int tm_mon;         /* month */
int tm_year;        /* year */
int tm_wday;        /* day of the week */
int tm_yday;        /* day in the year */
int tm_isdst;       /* daylight saving time */

  };
The members of the tm structure are:

       tm_sec    The number of seconds after the minute, normally in the range
                 0 to 59, but can be up to 60 to allow for leap seconds.

       tm_min    The number of minutes after the hour, in the range 0 to 59.

       tm_hour   The number of hours past midnight, in the range 0 to 23.

       tm_mday   The day of the month, in the range 1 to 31.

       tm_mon    The number of months since January, in the range 0 to 11.

       tm_year   The number of years since 1900.

       tm_wday   The number of days since Sunday, in the range 0 to 6.

       tm_yday   The number of days since January 1, in the range 0 to 365.

       tm_isdst  A  flag  that  indicates  whether  daylight saving time is in
                 effect at the time described.  The value is positive if  day‐
                 light  saving time is in effect, zero if it is not, and nega‐
                 tive if the information is not available.    


下面是一个程序,输入某个日期(年份不要太久远,否则超出time_t的范围),输出哪个日期是星期几,还有下个星期一是哪天:

#include<iostream>
#include<ctime>
#include<string.h>
using namespace std;
struct Date{
int day;
int month;
int year;
};
Date& add(Date& date,int day,int month,int year){
//这个函数什么也没考虑,仅仅为了测试
date.day+=day;
date.month+=month;
date.year+=year;
return date;
}
int tellWeekday(int mon,int day,int year){
struct tm ct;
//bzero(&ct,sizeof(ct));
memset(&ct,0,sizeof(ct));//take care of pointer
ct.tm_year=year-1900;//maybe ct->tm_year is read only if ct is pointer
ct.tm_mon=mon-1;
ct.tm_mday=day;
//ct.tm_sec=ct->tm_min=ct->tm_hour=ct->tm_wday=ct->tm_yday=ct->tm_isdst=0;
time_t ctt=mktime(&ct);
if(ctt==-1) return -1;
struct tm* ans=localtime(&ctt);
cout<<"The day of the week is(0~6): "<<ans->tm_wday<<endl;
}
int nextMondayDate(int mon,int day,int year){
struct tm ct;
int delta;
//bzero(&ct,sizeof(ct));
memset(&ct,0,sizeof(ct));
ct.tm_year=year-1900;
ct.tm_mon=mon-1;
ct.tm_mday=day;
time_t ctt=mktime(&ct);
if(ctt==-1) return -1;
struct tm* tm2=localtime(&ctt);
if(tm2->tm_wday==0) delta=1;
else delta=8-tm2->tm_wday;
ctt+=delta*24*3600;
tm2=localtime(&ctt);
cout<<tm2->tm_mon+1<<' '<<tm2->tm_mday<<"th "<<tm2->tm_year+1900<<endl;
}
int main(){
Date today,otherDay;
int mm,dd,yy;
time_t rawTime,inTime;
struct tm* timeInfo;
time(&rawTime);//get secs from 1970.1.1,save to rawTime
timeInfo=localtime(&rawTime);
cout<<"Now the time is: "<<asctime(timeInfo);//has already '\n'
today.year=timeInfo->tm_year+1900;
today.month=timeInfo->tm_mon+1;//starts from 0
today.day=timeInfo->tm_mday;
otherDay=add(today,1,1,1);
cout<<"After 1 year 1 month and 1 day,it will be:"<<endl
<<otherDay.month<<' '<<otherDay.day<<"th,"<<otherDay.year
<<endl;
cout<<"Input the date(mm dd yy):";
cin>>mm>>dd>>yy;
tellWeekday(mm,dd,yy);
cout<<"Input date(mm dd yy),return the next Monday:";
cin>>mm>>dd>>yy;
nextMondayDate(mm,dd,yy);
system("pause");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: