日期类问题

来源:互联网 发布:用友软件二次开发 编辑:程序博客网 时间:2024/06/08 09:03

基本数据结构

整理关于日期的基本数据结构,在C++中,没有日期类,所以要手动构造,关于日期的数据结构。

struct date{    int year;    int month;    int day;};

判断闰年

在日期中,一个重要的概念,就是闰年。
判断闰年的方法是:
年数能被4整除,但是不能被100整除,或者年数能不400整除。

bool is_leap_year(int year){    return (year%4==0&&(year%100!=0))||(year%400==0);}

计算两个日期的差值

规定一个原点时间,比如(0000年01月01日),计算两个特定日期之间的差时,只需要将他们与原点的日期天数差相减。

long calculateDays(date d){    int month[12]={31,28,31,30,31,30,31,31,30,31,30,31};    long count = 0;    for (int i = 1000; i < d.year; ++i) {        count+=365;        if (is_leap_year(i))            count+=1;    }    for (int i = 1; i < d.month; ++i) {        count+=month[i-1];    }    if (is_leap_year(d.year)&&d.month>2)        count+=1;    count+=d.day;    return count;}

上面计算了与1000年01月01日相差的天数

计算星期

给定一个日期,计算星期几。
方法是先计算出,与今天的时间差,然后用时间差与7取余数。
这里是先计算出固定日期是星期几,先前计算出,(1000年01月01日)是星期二。

string calculateWeek(date d){    string weeks[7]={"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};    return weeks[(calculateDays(d)%7+2)%7];}

格式化输出

日期如果通过格式化输出,需要在前面补零。

printf("%04d-%02d-%02d\n",d.year,d.month,d.day);
0 0
原创粉丝点击