JDK源码阅读-------自学笔记(十四)(java.util.Calendar日历类)

Calendar

  • 提供了关于日期计算的相关功能,比如:年、月、日、时、分、秒的展示和计算。
  • GregorianCalendar 是 Calendar 的一个具体子类,提供了世界上大多数国家/地区使用的标准日历系统
  • 所在包java.util.Calendar

实战

  • 初始化
    1    Calendar calendar = new GregorianCalendar();
    View Code
  • 打印结果
    1         Calendar calendar = new GregorianCalendar(3000, 12, 12, 15, 31, 42);
    2 
    3         System.out.println(calendar);
    View Code
  • 获取对象的值
     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());
    View Code

注:
    参数表示 日: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());
    View Code
  • 日期的计算
     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());
    View Code
  • 日期对象和时间对象的转化
     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     }
    View Code
  • 编写程序,利用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     }
View Code

注:

       JDK8,已经推出了新的取代的新方案,

详情查阅 https://www.cnblogs.com/liuyangfirst/p/11257602.html

原文地址:https://www.cnblogs.com/liuyangfirst/p/12873154.html