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个数字都出现,且只出现一次. ·同一行或同一列中相邻两个元 ...
随机推荐
- bzoj2653
CLJ神牛的可持久化论文的题目,果然厉害其实第一步能想到后面就还是很简单的首先是二分答案,转化为判定性问题然后对于区间内的数,比他大的标为1,小的标为-1显然,如果存在一个左右端点符合的区间使得这个区 ...
- PuTTY 'modmul()' 函数缓冲区下溢漏洞(CVE-2013-4206)
漏洞版本: PuTTY 0.52 - 0.63 漏洞描述: BUGTRAQ ID: 61645 CVE(CAN) ID: CVE-2013-4206 PuTTY是Windows和Unix平台上的PuT ...
- 分布式文件系统FastDFS安装与配置(单机)
安装包如下:fastdfs-nginx-module_v1.16.tar.gzFastDFS_v5.05.tar.gzlibfastcommon-master.zipnginx-1.8.0.tar.g ...
- 裸机编程与OS环境编程的有关思考
这里的所谓的裸机编程指的是为“无OS支持的硬件系统编程”,而实际的编程工作肯定需要一个环境,通常这样的情况中,编程和编译的环境叫做“宿主机”,最终的程序在“目标机”上运行(交叉编译).而OS环境编程指 ...
- 解决Mac OS X Lion狮子系统及win7多分区教程
[绿茶教程]解决Mac OS X Lion狮子系统及win7多分区教程 工具/原料 8G的u盘制作lion系统安装盘 步骤/方法 插入U盘---开机---按住左下角“Option”键(alt ...
- iOS中懒加载
1.懒加载基本 懒加载——也称为延迟加载,即在需要的时候才加载(效率低,占用内存小).所谓懒加载,写的是其get方法. 注意:如果是懒加载的话则一定要注意先判断是否已经有了,如果没有那么再去进行实例化 ...
- octopress添加回到顶部按钮
准备回到顶部的png图片一枚,可以随自己喜好google.分享我的 取名top.png,保存在octopress/source/images/top.png octopress/source/_inc ...
- mahout算法源码分析之Collaborative Filtering with ALS-WR拓展篇
Mahout版本:0.7,hadoop版本:1.0.4,jdk:1.7.0_25 64bit. 额,好吧,心头的一块石头总算是放下了.关于Collaborative Filtering with AL ...
- NYOJ 14 贪心解题报告
会场安排问题 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描述 学校的小礼堂每天都会有许多活动,有时间这些活动的计划时间会发生冲突,需要选择出一些活动进行举办.小刘的工 ...
- XSS 简单理解之:AntiSamy
AntiSamy介绍 OWASP是一个开源的.非盈利的全球性安全组织,致力于应用软件的安全研究.我们的使命是使应用软件更加安全,使企业和组织能够对应用安全风险作出更清晰的决策.目前OWASP全球拥有1 ...