实现代码:

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. R语言 一元线性回归

    #一元线性回归的基本步骤#1.载入数据 给出散点图 x<-c(0.10,0.11,0.12,0.13,0.14,0.15,0.16,0.17,0.18,0.20,0.21,0.23) y< ...

  2. HDOJ/HDU 2555 人人都能参加第30届校田径运动会了(判断加排序~)

    Problem Description 杭州师范大学第29届田径运动会圆满的闭幕了,本届运动会是我校规模最大,参赛人数最多的一次运动会.在两天半时间里,由学生.教工组成的61支代表队共2664名运动员 ...

  3. SRM 601(1-250pt,500pt)

    DIV1 250pt 题意:有很多袋子,里面装有苹果和橘子(也可能没有),给出每个袋子里有多少个苹果,多少个橘子.如果每个袋子里含有水果的总数都不小于x个,则可以从每个袋子里都拿出x个水果(拿出苹果和 ...

  4. 教你修改Linux下高并发socket最大连接数所受的各种限制

    1.修改用户进程可打开文件数限制 在Linux平台上,无论编写客户端程序还是服务端程序,在进行高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开 文件数量的限制(这是因为系统为 ...

  5. Codeforces Round #363 (Div. 2) 698B Fix a Tree

    D. Fix a Tree time limit per test 2 seconds memory limit per test 256 megabytes     A tree is an und ...

  6. 解决wix生成的msi的license对话框空白的问题

    今天用Wix做之前写的那个Windows Live Writer的Markdown插件的msi安装包,在wxs文件中用如下的代码添加license文件,结果发现生成msi后license文件框一直是空 ...

  7. Android RecyclerView使用(一)

    RecyclerView一种可以替换掉listview gridview 瀑布流等控件的新视图控件,控制视图回收和复用 ==优化内存可以替换listview 与listview的不同之处是:listv ...

  8. HUNNU--湖师大--11409--Skill

    Skill Yasser is an Egyptian coach; he will be organizing a training camp in Jordan. At the end of ca ...

  9. python装饰实现线程同步

    import threading def tryfinally(finallyf):   u"returns a decorator that adds try/finally behavi ...

  10. JSON 入门

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于ECMAScript的一个子集. JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族 ...