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

实现代码:
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)求解几天后的日期,几天前的日期和两个日期之间的天数的更多相关文章
- DateUtil日期工具类
目录 (1)需要导入的包 (2)DateUtil类 (1)需要导入的包 主要用于Strings.isNullOrEmpty(date) <!--string处理类--> <depen ...
- java时间工具类
在项目中,很多地方需要根据时间获取相应的数据,将时间格式化,或者时间比较等相关操作.一个良好的工具类不仅可以减少代码冗余,还能促进业务处理,加快进度. /** * @author: lxw * @Da ...
- CalendarUtil 日期操作工具类
版权声明:本文为博主原创文章,未经博主允许不得转载. [java] view plain copy import java.util.Calendar; import java.text.DateFo ...
- POJ1034 The dog task
题目来源:http://poj.org/problem?id=1034 题目大意: 一个猎人在遛狗.猎人的路径由一些给定的点指定.狗跟随着猎人,要与主人同时到达那些指定的点.在丛林里有一些有趣的地方, ...
- 如果奇迹有颜色,那么一定是暴力or模拟比较6
模拟就是一个思想,给你一个东西,没有很好的算法去解决,只需要计算机去暴力,优雅的暴力就可以叫算法了 主要还是考大家的代码能力,这次题目应该不需要任何前置技能. 1001 Time Limit(Comm ...
- 4. SVM分类器求解(2)
最优间隔分类器(optimal margin classifier) 重新回到SVM的优化问题: 我们将约束条件改写为: 从KKT条件得知只有函数间隔是1(离超平面最近的点)的线性约束式前面的系数,也 ...
- 跳跃的舞者,舞蹈链(Dancing Links)算法——求解精确覆盖问题
精确覆盖问题的定义:给定一个由0-1组成的矩阵,是否能找到一个行的集合,使得集合中每一列都恰好包含一个1 例如:如下的矩阵 就包含了这样一个集合(第1.4.5行) 如何利用给定的矩阵求出相应的行的集合 ...
- 遗传算法的C语言实现(二)-----以求解TSP问题为例
上一次我们使用遗传算法求解了一个较为复杂的多元非线性函数的极值问题,也基本了解了遗传算法的实现基本步骤.这一次,我再以经典的TSP问题为例,更加深入地说明遗传算法中选择.交叉.变异等核心步骤的实现.而 ...
- Futoshiki求解
Futoshiki求解 Futoshiki是对于一个n的方阵,需要满足如下条件: ·每一行和每一列的元素都不能重复,即每一行和每一列1到n,n个数字都出现,且只出现一次. ·同一行或同一列中相邻两个元 ...
随机推荐
- nbtstat Linux版源码, 通过IP获取主机名
nbtstat Linux版, 通过IP获取主机名/* NETBIOS name lookup tool - by eSDee of Netric (www.netric.org) * yeh.. i ...
- Maven学习(2) - Maven构建多模块Java工程
概述 项目开发时,通常会将项目分为多个模块进行开发,本文讨论如何用Maven构建多模块的Java工程. 软件环境 Java:1.6.0_26 Maven:3.1.1 OS:WindowXP SP3 项 ...
- HDU 5912 Fraction 【模拟】 (2016中国大学生程序设计竞赛(长春))
Fraction Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Su ...
- 265行JavaScript代码的第一人称3D H5游戏Demo【个人总结1】
本文目的是分解前面的代码.其实,它得逻辑很清楚,只是对于我这种只是用过 Canvas 画线(用过 Fabric.js Canvas库)的人来说,这个还是很复杂的.我研究这个背景天空也是搞了一天,下面就 ...
- IE的表头固定/表头不动(使用expression)
本文主要介绍在IE浏览器中,实现表头固定的一种方法.这种方法使用到了 IE 浏览器特有的 expression 方法. 表头固定DEMO1 主要代码: <style type="tex ...
- 敏捷开发松结对编程系列:L型代码结构案例StatusFiltersDropdownList(中)
这是松结对编程的第22篇(专栏目录). 接前文 业务代码 比较长,基本上就是看被注释隔开的三大段,先显示状态群筛选链接,然后是单个状态筛选,然后是显示下拉框的当前选中项,最后显示下拉框. public ...
- list去除重复
1. [代码][Python]代码 简单去重 ? 1 2 3 4 5 l = [1,2,3,3] l = list(set(l)) >>>l >>>[ ...
- IAAS云计算产品畅想-公有云主机产品优势
关于云计算的优势介绍真是太多太多了,但是说实话准确性欠妥. 云计算也是有很多细分的: 公有云.私有云.混合云 IAAS.PAAS.SAAS 园区云.行业云(医疗云.教育云等等) 说起优点来,绝对不能一 ...
- Android中RelativeLayout的字符水平(垂直居中)对齐
[背景] 此处Android中显示出来的TextView中的内容,水平中间不对其. 想要实现水平居中对齐. [折腾过程] 1.搜: android RelativeLayout horizontal ...
- POJ1330Nearest Common Ancestors——近期公共祖先(离线Tarjan)
http://poj.org/problem? id=1330 给一个有根树,一个查询节点(u,v)的近期公共祖先 836K 16MS #include<iostream> #includ ...