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个数字都出现,且只出现一次. ·同一行或同一列中相邻两个元 ...
随机推荐
- 使用Redis作为消息队列服务场景应用案例
一.消息队列场景简介 "消息"是在两台计算机间传送的数据单位.消息可以非常简单,例如只包含文本字符串:也可以更复杂,可能包含嵌入对象.消息被发送到队列中,"消息队列&qu ...
- 【转】VSync Count 垂直同步
原文:http://blog.csdn.net/yesy10/article/details/7794556 Unity3D中新建一个场景空的时候,帧速率(FPS总是很低),大概在60~70之间.一直 ...
- HDOJ 1312题Red and Black
Red and Black Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total ...
- assembly的说明
Assembly SampleAssembly; // Instantiate a target object. Int32 Integer1 = new Int32(); Type Type1; / ...
- 与IO相关的等待事件troubleshooting-系列5
'db file scattered read' 这是另一种常见的等待事件.他产生于Oracle从磁盘读取多个块到Buffer Cache中非连续(" scattered&q ...
- 405. Convert a Number to Hexadecimal
..感觉做的很蠢. 主要就是看负数怎么处理. 举个例子,比如8位: 0111 1111 = 127 1111 1111 = -1 1000 0000 = -128 正常情况1111 1111应该是25 ...
- JAVA IO详解
[案例1]创建一个新文件 1 2 3 4 5 6 7 8 9 10 11 import java.io.*; class hello{ public static void main(Stri ...
- Android color(颜色) 在XML文件和java代码中
Android color(颜色) 在XML文件和java代码中,有需要的朋友可以参考下. 1.使用Color类的常量,如: int color = Color.BLUE;//创建一个蓝色 是使用An ...
- 对vpn的认识
网上关于vpn的资料非常多,看后眼花缭乱,仍然感觉一片混沌.网上,网下參考一些资料后.试着理清一些概念问题,由于,概念理清了,找到门了,才不至于左右徘徊,一片混沌. 首先vpn,这个我们都知道叫虚拟专 ...
- docker 镜像和容器的批量清理
镜像和容器的清理 删除所有运行中的容器 $ docker kill $(docker ps -q) 删除所有停止的容器 $ docker rm $(docker ps -a -q) 删除所有没有tag ...