习题集(2)-Java日期类应用

 

 //方法类,用于操作数据:

 1 package DateFormatClass;
 2 
 3 import java.text.ParseException;
 4 import java.text.SimpleDateFormat;
 5 import java.util.*;
 6 
 7 public class DateDao {
 8     /**
 9      * 计算间隔天数
10      * @param cl
11      * @return
12      */
13     public static int intervalNum(Calendar cl) throws ParseException {
14         //获取传入日期的Date对象
15         Date date = cl.getTime();
16         //调用方法,获取传入时间的格林威治时间
17         long big = date.getTime();
18         //创建日期格式化对象
19         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
20         //调用方法,设置一个默认的时间,并让他格式化
21         Date parse = sdf.parse("2020-02-02");
22         //计算默认日期的格林威治时间
23         long small = parse.getTime();
24         int intervalDay = (int)(big-small)/(1000*60*60*24);
25 
26         if((big-small)<0){
27             return -1;
28         }
29         return intervalDay;
30     }
31 }

//视图类:用于提醒用户输入,并将输入的值返回出去
 1 package DateFormatClass;
 2 
 3 import java.util.Scanner;
 4 
 5 public class Views {
 6     private static Scanner input = new Scanner(System.in);
 7     public int inputNum(int min,int max){
 8         System.out.println("请根据需求输入一个合法的数字");
 9         String s = input.nextLine();
10         int num = -1;
11         try{
12             num = Integer.parseInt(s);
13         }catch (NumberFormatException e){
14             System.out.println("你输入的不是数字,请重新输入");
15             inputNum(min,max);
16         }
17         if(num<min || num>max){
18             System.out.println("你输入的数字范围不对,请重新输入");
19             inputNum(min,max);
20         }
21         return num;
22     }
23 }

 

//这是测试类,用来调度数据处理和视图的关系

 1 package DateFormatClass;
 2 
 3 import java.text.ParseException;
 4 import java.util.Calendar;
 5 
 6 import static DateFormatClass.DateDao.intervalNum;
 7 
 8 @SuppressWarnings("all")
 9 public class Test {
10     public static void main(String[] args) throws ParseException {
11         //创建视图对象
12         Views views = new Views();
13         System.out.println("请输入年份");
14         int year = views.inputNum(2020, 9999);
15         System.out.println("请输入月份");
16         int month = views.inputNum(1, 12);
17 
18         //创建日期类对象
19         Calendar cl = Calendar.getInstance();
20         //设置默认值
21         cl.set(Calendar.YEAR, year);
22         cl.set(Calendar.MARCH, month - 1);
23         cl.set(Calendar.DATE, 1);
24         //判断初始日期是星期几
25         int dayOfWeek = cl.get(Calendar.DAY_OF_WEEK);
26         //获取本月最大的天数
27         int dayNumberOfMonth = cl.getActualMaximum(Calendar.DATE);
28         //打印日期的抬头
29         System.out.println("星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六");
30         //打印日期第一排空格
31         for (int i = 1; i <= dayOfWeek - 1; i++) {
32             System.out.printf("%-8s", "");
33         }
34         //本月休假天数
35         int relaxDays = 0;
36         //本月休假的周末天数
37         int relaxWeekends = 0;
38 
39 
40         for (int i = 1; i <= dayNumberOfMonth; i++) {
41             //设置日
42             cl.set(Calendar.DATE, i);
43             //得到当前日期与初始日期:2020.2.2相差的天数
44             int intervalDays = intervalNum(cl);
45 
46             //判断该天是不是休息日
47             //隔3天休息一次,即每4天休息一次
48             if (intervalDays % 4 == 0) {
49                 //补齐为8个字符,有[]
50                 System.out.printf("%-8s", "[" + i + "]");
51                 relaxDays++;
52                 //判断是否周末
53                 //注意:1:周日,7:周六
54                 if (cl.get(Calendar.DAY_OF_WEEK) == 1 || cl.get(Calendar.DAY_OF_WEEK) == 7) {
55                     relaxWeekends++;
56                 }
57             } else {
58                 //补齐为8个字符,无[]
59                 System.out.printf("%-8s", i);
60             }
61 
62             //如果该天是周六,换行
63             //注意:1:周日,7:周六
64             if (cl.get(Calendar.DAY_OF_WEEK) == 7) {
65                 System.out.println();
66             }
67 
68         }
69         System.out.println();
70         System.out.println("本月休息天数有:" + relaxDays + "天");
71         System.out.println("本月轮到周末休息天数是" + relaxWeekends + "天");
72     }
73 
74 }

 



posted @ 2021-06-08 20:53  白杨树&  阅读(126)  评论(0编辑  收藏  举报