实现代码:

package com.corejava.chap02;

public class Date {
private int year;
private int month;
private int day;

public Date(int year, int month, int day) {
this.year = year;
this.month = month;
this.day = day;
}

public void display(){
System.out.println(year + "/" + month + "/" +day);
}

//isLeapYear
private boolean isLeapYear(){

if(year % 400 == 0) return true;
else if(year%4 == 0 && year % 100 != 0) return true;
else return false;
}
//The max days of the month
private int MaxofMonth(int month){
int max = 0;
switch(month){
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12: max = 31;break;
case 4:
case 6:
case 9:
case 11: max = 30;break;
case 2:if(isLeapYear()) max = 29;else max = 28;break;
default : System.out.println("Date error");//
}
return max;
}

public Date nextDay(){
int nday = day +1;
int nmonth = month;
int nyear = year;
if (nday > MaxofMonth(month)){
nmonth = month +1;
if (nmonth > 12){
nyear += 1;
return new Date(nyear,1,1);
} else {
return new Date(year,nmonth,1);
}
} else {
return new Date(year,month,nday);
}

}

public Date afterDay(int n) {
/*
Date temp = new Date(year,month,day);
for (int i=0; i<n; i++){
temp = temp.nextDay();
}
return temp;
*/

Date temp = null;

if (n==0) temp = new Date(year,month,day);
else if (n<0) temp = afterDay(n+1).previousDay();
else temp = afterDay(n-1).nextDay();
return temp;
}

public Date previousDay(){
int pday = day - 1;
int pmonth = month;
int pyear = year;
if(pday <= 0) {
pmonth = month - 1;
if(pmonth < 1){
pyear = year - 1;
pmonth = 12;
}
pday = MaxofMonth(pmonth);
}
return new Date(pyear,pmonth,pday);
}
private int compare(Date date) {
if(date.year == this.year){
if(date.month == this.month) {
if(date.day == this.day) return 0; // more true
else if(date.day > this.day) return 1;
else return -1;
}
else if(date.month > this.month) return 1;
else return -1;
}
else if(date.year > this.year) return 1;
else return -1;
}
public int sub(Date date) {
Date sdate = date;
int count = 0;
if(compare(date)==0);
else if(compare(date) == 1){
for(;compare(sdate)==1;){
count ++;
sdate = sdate.previousDay() ;
}
} else {
for(;compare(sdate)==-1;){
count ++;
sdate = sdate.nextDay();
}
}
return count;
}
}

验证代码:

package com.corejava.chap02;

public class TestDate{
public static void main(String[] args){
Date date = new Date(2012,12,30);
Date nextDate = date.nextDay();
Date nextNextDay = nextDate.nextDay();

System.out.println("------first Date------");
date.display();
System.out.println("------Next Day------");
nextDate.display();
System.out.println("------Next Next Day------");
nextNextDay.display();

System.out.println("------after 5 days------");
date.afterDay(5).display();

System.out.println("------previousday of 2013/1/1------");
Date previous = nextDate.previousDay();
previous.display();

System.out.println("------before 5 days------");
date.afterDay(-5).display();

Date d = new Date(2012,12,29);
System.out.println("------Test sub()------");
System.out.print("compare with :");
d.display();
System.out.println(date.sub(d));
}
}

nextDay、beforeDay以及根据nextDay(beforeDay)求解几天后的日期,几天前的日期和两个日期之间的天数的更多相关文章

  1. DateUtil日期工具类

    目录 (1)需要导入的包 (2)DateUtil类 (1)需要导入的包 主要用于Strings.isNullOrEmpty(date) <!--string处理类--> <depen ...

  2. java时间工具类

    在项目中,很多地方需要根据时间获取相应的数据,将时间格式化,或者时间比较等相关操作.一个良好的工具类不仅可以减少代码冗余,还能促进业务处理,加快进度. /** * @author: lxw * @Da ...

  3. CalendarUtil 日期操作工具类

    版权声明:本文为博主原创文章,未经博主允许不得转载. [java] view plain copy import java.util.Calendar; import java.text.DateFo ...

  4. POJ1034 The dog task

    题目来源:http://poj.org/problem?id=1034 题目大意: 一个猎人在遛狗.猎人的路径由一些给定的点指定.狗跟随着猎人,要与主人同时到达那些指定的点.在丛林里有一些有趣的地方, ...

  5. 如果奇迹有颜色,那么一定是暴力or模拟比较6

    模拟就是一个思想,给你一个东西,没有很好的算法去解决,只需要计算机去暴力,优雅的暴力就可以叫算法了 主要还是考大家的代码能力,这次题目应该不需要任何前置技能. 1001 Time Limit(Comm ...

  6. 4. SVM分类器求解(2)

    最优间隔分类器(optimal margin classifier) 重新回到SVM的优化问题: 我们将约束条件改写为: 从KKT条件得知只有函数间隔是1(离超平面最近的点)的线性约束式前面的系数,也 ...

  7. 跳跃的舞者,舞蹈链(Dancing Links)算法——求解精确覆盖问题

    精确覆盖问题的定义:给定一个由0-1组成的矩阵,是否能找到一个行的集合,使得集合中每一列都恰好包含一个1 例如:如下的矩阵 就包含了这样一个集合(第1.4.5行) 如何利用给定的矩阵求出相应的行的集合 ...

  8. 遗传算法的C语言实现(二)-----以求解TSP问题为例

    上一次我们使用遗传算法求解了一个较为复杂的多元非线性函数的极值问题,也基本了解了遗传算法的实现基本步骤.这一次,我再以经典的TSP问题为例,更加深入地说明遗传算法中选择.交叉.变异等核心步骤的实现.而 ...

  9. Futoshiki求解

    Futoshiki求解 Futoshiki是对于一个n的方阵,需要满足如下条件: ·每一行和每一列的元素都不能重复,即每一行和每一列1到n,n个数字都出现,且只出现一次. ·同一行或同一列中相邻两个元 ...

随机推荐

  1. 2015第44周六tomcat集群了解

    对于WEB应用集群的技术实现而言,最大的难点就是如何能在集群中的多个节点之间保持数据的一致性,会话(Session)信息是这些数据中最重要的一块.要实现这一点,大体上有两种方式,一种是把所有Sessi ...

  2. 低压差稳压器AMS1585

    (1)高效线性稳压. (2)输出高达4.6A,最高输入电压15V,推荐最低压差1.5V(最低1.35V),最大压差12V. (3)两种封装:TO220(直插式),TO230(贴片). 典型电路如下图所 ...

  3. HDOJ(HDU) 2521 反素数(因子个数~)

    Problem Description 反素数就是满足对于任意i(0< i < x),都有g(i) < g(x),(g(x)是x的因子个数),则x为一个反素数.现在给你一个整数区间[ ...

  4. HDOJ 1013题Digital Roots 大数,9余数定理

    Problem Description The digital root of a positive integer is found by summing the digits of the int ...

  5. 使用GPUImage开启的相机进行摄像,保存写入到Path

    之前已经有一篇博客讲过怎么开启摄像头并完成对摄像头的图像的滤镜化了,现在就说说怎么录像,并把这个添加滤镜的录像文件写到Path 原理是GPUImage给出了GPUImageMovieWriter这么个 ...

  6. [Struts] Hello World Demo

    Struts 是一个基于 MVC 模式的框架.Struts 2 并不是 Struts 的下一个版本,几乎重写了 Struts.本文中提到的 Struts 均指 Struts 2. Model, 负责维 ...

  7. galera mysql 多主复制启动顺序及命令

    Mysql 被复制机 sql启动

  8. hdoj 2141 Can you find it?【二分查找+暴力】

    Can you find it? Time Limit: 10000/3000 MS (Java/Others)    Memory Limit: 32768/10000 K (Java/Others ...

  9. 【Android - 框架】之Retrofit的使用

    Retrofit是Square公司发布的一个可以应用在Android和Java中的Http客户端访问框架,其底层应用的是OkHttp. 在这个帖子中,我们以下面这个Http请求为例: https:// ...

  10. 设计模式(4) -- 单例模式(Singleton)

    设计模式(4)  -- 单例模式(Singleton) 试想一个读取配置文件的需求,创建完读取类后通过New一个类的实例来读取配置文件的内容,在系统运行期间,系统中会存在很多个该类的实例对象,也就是说 ...