Calendar
- 提供了关于日期计算的相关功能,比如:年、月、日、时、分、秒的展示和计算。
- GregorianCalendar 是 Calendar 的一个具体子类,提供了世界上大多数国家/地区使用的标准日历系统
- 所在包java.util.Calendar
实战
- 初始化
1 Calendar calendar = new GregorianCalendar();
- 打印结果
1 Calendar calendar = new GregorianCalendar(3000, 12, 12, 15, 31, 42); 2 3 System.out.println(calendar);
- 获取对象的值
1 Calendar calendar = new GregorianCalendar(3000, 12, 12, 06, 31, 42); 2 3 StringBuilder stringBuilder = new StringBuilder(); 4 5 stringBuilder.append(calendar.get(Calendar.YEAR)); 6 stringBuilder.append("-"); 7 stringBuilder.append(calendar.get(Calendar.MONTH)); 8 stringBuilder.append("-"); 9 stringBuilder.append(calendar.get(Calendar.DATE)); 10 11 System.out.println(stringBuilder.toString());
注:
参数表示 日:Calendar.DATE和Calendar.DAYOFMONTH同义 星期几:1-7.(周日是1,周一是2......周六是7)
- 设置日期
1 Calendar calendar = new GregorianCalendar(); 2 3 calendar.set(Calendar.YEAR,10000); 4 calendar.set(Calendar.MONTH,10); 5 calendar.set(Calendar.DATE,15); 6 7 StringBuilder stringBuilder = new StringBuilder(); 8 9 stringBuilder.append(calendar.get(Calendar.YEAR)); 10 stringBuilder.append("-"); 11 stringBuilder.append(calendar.get(Calendar.MONTH)); 12 stringBuilder.append("-"); 13 stringBuilder.append(calendar.get(Calendar.DATE)); 14 15 System.out.println(stringBuilder.toString());
- 日期的计算
1 Calendar calendar = new GregorianCalendar(); 2 3 // 往后300天后的日期 4 calendar.add(Calendar.DATE,300); 5 6 7 StringBuilder stringBuilder = new StringBuilder(); 8 9 stringBuilder.append(calendar.get(Calendar.YEAR)); 10 stringBuilder.append("-"); 11 stringBuilder.append(calendar.get(Calendar.MONTH)); 12 stringBuilder.append("-"); 13 stringBuilder.append(calendar.get(Calendar.DATE)); 14 15 System.out.println(stringBuilder.toString());
- 日期对象和时间对象的转化
1 public static void main(String[] args) throws ParseException { 2 3 Calendar calendar = new GregorianCalendar(); 4 5 Date date = calendar.getTime(); 6 System.out.println("日历转日期:"+" "+date); 7 8 Calendar calendar1 = new GregorianCalendar(); 9 calendar1.setTime(new Date()); 10 11 System.out.println("日期转日历:"); 12 printYearAndMonthAndDay(calendar1); 13 14 } 15 16 private static void printYearAndMonthAndDay(Calendar calendar) { 17 StringBuilder stringBuilder = new StringBuilder(); 18 19 stringBuilder.append(calendar.get(Calendar.YEAR)); 20 stringBuilder.append("-"); 21 stringBuilder.append(calendar.get(Calendar.MONTH)); 22 stringBuilder.append("-"); 23 stringBuilder.append(calendar.get(Calendar.DATE)); 24 25 System.out.println(stringBuilder.toString()); 26 }
- 编写程序,利用GregorianCalendar类,打印当前月份的日历,今天的日期是 2017-05-18
样式:
代码:
1 public static void main(String[] args) { 2 3 //输入日期处理 4 String printClientDate = getPrintClientDate(); 5 6 try { 7 // 日期格式化 8 Calendar c = getFormatCalendar(printClientDate); 9 10 //获取月份中的哪一天 11 int day = c.get(Calendar.DAY_OF_MONTH); 12 13 // 获取日期最大值 14 int days = c.getActualMaximum(Calendar.DATE); 15 16 //第一行周数空格的打印 17 getWeekResult(c); 18 19 //输出月份内日期 20 getDateResult(c, day, days); 21 22 } catch (ParseException e) { 23 e.printStackTrace(); 24 } 25 } 26 27 /** 28 * 获取日期返回结果 29 * 30 * @param c 输入日期对像 31 * @param day 当前输入的天数 32 * @param days 输入的月最多多少天 33 */ 34 private static void getDateResult(Calendar c, int day, int days) { 35 36 for (int i = 1; i <= days; i++) { 37 38 // 打印的天数是否是当前输入的天数,是加*,不是直接打印 39 if (day == c.get(Calendar.DAY_OF_MONTH)) { 40 //标记输入的天数(即当前输入天) 41 System.out.print(c.get(Calendar.DAY_OF_MONTH) + "* "); 42 } else { 43 System.out.print(c.get(Calendar.DAY_OF_MONTH) + " "); 44 } 45 46 // 获取当前日期是周几,如果是周六,就进行换行 47 if (c.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY) { 48 System.out.println(); 49 } 50 51 //每次打印完,下次打印前,天数加一天 52 c.add(Calendar.DAY_OF_MONTH, 1); 53 54 } 55 } 56 57 /** 58 * 获取输入周 59 * 60 * @param c 输入日期 61 */ 62 private static void getWeekResult(Calendar c) { 63 System.out.println("日 一 二 三 四 五 六"); 64 65 // 当前日期置为1,就是日历的第一天 66 c.set(Calendar.DAY_OF_MONTH, 1); 67 68 // 第一行日历根据周几,前边添加几个换行符 69 for (int i = 0; i < c.get(Calendar.DAY_OF_WEEK) - 1; i++) { 70 System.out.print(" "); 71 } 72 } 73 74 /** 75 * 获取日期格式化后 76 * 77 * @param printClientDate 输入的日期 78 * @return 返回日期对象 79 * @throws ParseException 产生异常 80 */ 81 private static Calendar getFormatCalendar(String printClientDate) throws ParseException { 82 Date date; 83 DateFormat df = new SimpleDateFormat("yyyy-MM-dd"); 84 date = df.parse(printClientDate); 85 Calendar c = new GregorianCalendar(); 86 c.setTime(date); 87 88 System.out.println("您刚刚输入的日期是:" + df.format(date)); 89 return c; 90 } 91 92 /** 93 * 获取控制台输入日期 94 * 95 * @return 输入的日期 96 */ 97 private static String getPrintClientDate() { 98 System.out.println("请输入日期(格式为:2020-9-10):"); 99 Scanner scanner = new Scanner(System.in); 100 return scanner.nextLine(); 101 }
注:
JDK8,已经推出了新的取代的新方案,