学习java要学类与对象的使用吗_java学习-初级入门-面向对象⑤-类与对象-类与对象的定义和使用3...

这次我们要做一个日期类Date类

主要目的是    1.  熟悉-->构造不同参数的函数  2.善于利用已有的函数!!

题目要求:

Date类要求

可设定年月日

可转换为字符串,并可指定分隔符,默认为’-’

可获取若干天以前/后的日期

可计算与某个日期相隔的天数,日期的形式可能是日期对象,也可能是代表年月日的三个整数

可与某个日期比较大小,日期的形式同上

可计算星期几

解题思路:

1.设置类的变量,并创建构造函数。

2.创建 日期转换字符串函数,  分别创建带参数,和不带参数的函数

3.计算若干天以前/后的日期,先把日期转换为天数,进行加减,在吧天数转换为日期

4.计算某个提起相隔的天数,可以把日期转换为天数,加减判断。  日期形式两种,这里就需要,多个构造函数(根据要求设置参数)

5.比较日期大小,  转化为天数比较

6.计算星期几,  天数%7的余数,就是星期数 。我们发现周日为0,这个时候就需要(天数-1)%7 +1  ,这样就避免了上述情况

java自身有Date函数,不过这次我们要自己创建。JAVA中的月份,星期几的表示方式有产别 (正常表示-1,因为是从0开始)

程序代码:

1 public classDate {2 public intyear;3 public intmonth;4 public intday;5 public static String splitChar = "_";6

7

8 /**

9 * 比较两个日期大小10 *@paramdate 拿来比较的日期11 *@return0-等于 1-大于 -1-小于12 */

13 public bytecompare(Date date) {14 int n =off(date);15 //第一种判断方法

16 /*if (0==n){17 return 0;18 }19 if(n > 0){20 return 1;21 }22 return -1;*/

23

24 //第二种判断方法

25 return (byte)(0 == n?0:(n>0?1:-1));26 }27

28 /**

29 * 计算与某个日期相隔的天数30 *@paramyear 年 20xx形式31 *@parammonth 月32 *@paramday 日33 *@return相隔的天数34 */

35 public int off(int year, int month, intday) {36 Date date = newDate(year,month,day);37 returnoff(date);38 }39

40 /**

41 * 计算与某个日期相隔的天数42 *@paramdate 相隔的日期 20xx-xx-xx形式43 *@return相隔的天数44 */

45 public intoff(Date date) {46 return this.getDays()-date.getDays();47 }48

49 /**

50 * 获取若干天以前的日期51 *@paramdays 天数52 *@return改变后的日期53 */

54 public Date before(intdays) {55 int n = this.getDays() -days;56

57 return newDate(n);58 }59

60 /**

61 * 获取若干天以后的日期62 *@paramdays 天数63 *@return改变后的日期64 */

65 public Date after(intdays) {66 int n = this.getDays() +days;67

68 return newDate(n);69 }70

71 /**

72 * 计算当前日期为周几?73 *@return星期几74 */

75 public intweekday() {76 int days =getDays();77 return (byte)((days-1)%7+1);78 }79

80 /**

81 * 将日期转换为字符82 *@return日期字符串形式 2014-12-0883 */

84 publicString toStr() {85 return toStr("-");86 }87

88 /**

89 * 将日期转换为字符串90 *@paramsplitChar 分割字符91 *@return日期字符串92 */

93 publicString toStr(String splitChar) {94 return String.format("%d%s%d%s%d",this.year,splitChar,this.month,splitChar,this.day);95 }96

97 /**

98 * 构造函数99 *@paramyear 年100 *@parammonth 月101 *@paramday 日102 */

103 public Date(int year, int month, intday) {104 this.year =year;105 this.month =month;106 this.day =day;107 }108

109 /**

110 * 计算当前日期是历史上的第几天111 *@return天数112 */

113 public intgetDays(){114 int sum =day;115 intmonthday;116 switch (month - 1){117 case 12:118 monthday = 30;119 sum +=monthday;120 case 11:121 monthday = 30;122 sum +=monthday;123 case 10:124 monthday = 31;125 sum +=monthday;126 case 9:127 monthday = 30;128 sum +=monthday;129 case 8:130 monthday = 31;131 sum +=monthday;132 case 7:133 monthday = 31;134 sum +=monthday;135 case 6:136 monthday = 30;137 sum +=monthday;138 case 5:139 monthday = 31;140 sum +=monthday;141 case 4:142 monthday = 30;143 sum +=monthday;144 case 3:145 monthday = 31;146 sum +=monthday;147 case 2:148 monthday = isLeap(year)?29:28;149 sum +=monthday;150 case 1:151 monthday = 31;152 sum +=monthday;153 }154

155 for (int year = this.year-1;year>=1;year--){156 sum += isLeap(year)?366:365;157 }158 returnsum;159 }160

161 /**

162 * 构造函数163 *@paramdays 天数164 */

165 public Date(intdays){166 /*

167 思路:168 1.确定年份,逐年减去该年的天数,直到不够减169 2.确定月份,逐月减去该月的天数,直到不够减170 3.剩下的天数即为日171 */

172 year = 1;173 while (true){174 int n = isLeap(year)?366:365; //该年的天数

175 if(days

182 int []mon = {31,28,31,30,31,30,31,31,30,31,30,31};183 for (month=1;month<=12;month++){184 //该月的天数

185 int monthDay = mon[month-1];186 if (2==month&&isLeap(year)){187 monthDay ++;188 }189 if(days

197 /**

198 * 判断闰年199 *@paramyear200 *@returntrue-闰年 false-平年201 */

202 public boolean isLeap(intyear){203 return year%400==0||(year%4==0&&year%100!=0);204 }205

206 }

测试类Test

1 public classTest {2 public static voidmain(String[] args) {3

4 Date date1 = new Date(2016,11,2); //设置日期1 2016-11-25 Date date2 = new Date(2017, 3,12); // 设置日期2 2017-3-126

7 System.out.printf("%s是星期%d\n",date1.toStr(),date1.weekday()); // 计算日期1是星期几8 9 System.out.printf("%s是星期%d\n",date2.toStr(Date.splitChar),date2.weekday()); //计算日期2是星期几10 11 //转换为字符串,指定分隔符

12

13 Date date3 = date1.after(50); // 日期3为, 日期1后50天14 Date date4 = date1.before(50);     // 日期4为, 日期2前50天15

16 int off1 =date3.off(date4); // 计算日期3 和 日期4相差多少天17 System.out.printf("%s和%s相隔%d天\n",date3.toStr(),date4.toStr(),off1);18 19

20 int off2 = date3.off(2017,2,21); // 计算日期3 和 2017-2-21 相差多少天21 System.out.printf("%s和2017-02-21相隔%d天\n",date3.toStr(),off2);22 23

24 byte result =date3.compare(date4); // 比较日期3 和 日期4 的大小关系25 String relation = "";26 switch(result){27 case 0: relation = "等于" ; break;28 case 1: relation = "大于" ; break;29 case -1: relation = "小于" ; break;30 }31 System.out.printf("%s%s%s\n",date3.toStr(),relation,date4.toStr());32

33 Date d = new Date(800); 计算公元第800天,是什么日期34 System.out.println("今天是:"+d.toStr());35

36 System.out.printf("今天是公元的第%d天\n",date3.getDays()); //输出日期3是公元的第几天37 38 }39 }

运行结果:

2a4cf908f9aed176a800aa43af135da7.png

心得体会:

我们要善于运用 带参函数,这样同样功能的函数带不同参数时,解决不同的问题。

比如说计算两个日期多少天  1你可以参数设置为日期,直接与日期进行比较  2.你可以设置为具体的年月日,进行比较。

使用时很方便。

表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
相关推荐
©️2020 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页