C++中关于日历的类我暂时没有找到,哈哈,网上只能找到这样的描述:“C++ 标准库没有提供所谓的日期类型。C++ 继承了 C 语言用于日期和时间操作的结构和函数。为了使用日期和时间相关的函数和结构,需要在 C++ 程序中引用 <ctime> 头文件。“所以操作日期在C++里面是比较烦人的。参看Java的Calendar类,它提供了各种操作类,详细可以参看:
http://androidxref.com/9.0.0_r3/xref/libcore/ojluni/src/main/java/java/util/Calendar.java
在Obotcha中我们也仿照Java,有一个Calendar类,它提供了下面的方法:
bool isLeapYear(int year);
void increaseYear(int year);
void decreaseYear(int year);
void increaseDay(int day);
void decreaseDay(int day);
void increaseMonth(int mon);
void decreaseMonth(int mon);
void increaseHour(int hour);
void decreaseHour(int hour);
void increaseMinute(int minute);
void decreaseMinute(int minute);
void increaseSecond(int second);
void decreaseSecond(int second);
bool sameDate(Calendar c);
bool set(CalendarType type,int value);
int get(CalendarType type);
long int toTimeMillis();
void setTime(long int msec);
Calendar类中,比较复杂的就是计算dayOfweek.介绍一下dayOfweek的计算方法(基姆拉尔森计算公式),具体的算法可以baidu一下,代码如下,卡卡几下就把星期几计算出来了~~~:
int _Calendar::caculateDayOfWeek(int y, int m, int d) {
m += 1;
d += 1;
if(m == 1 || m == 2) {
m += 12;
y--;
}
int week = (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7;
return week;
}
此外,由于Calendar基本都是自己写的算法,所以特地跑了一下单体测试:
https://github.com/wangsun1983/Obotcha/tree/master/test/testCalendar
感兴趣的同学可以看一下。自从开始写Obotcha,越来越觉的单体测试的重要性。