zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    C#基础第五天-作业-用DataTable制作名片集
    C#基础第四天-作业答案-Hashtable-list<KeyValuePair>泛型实现名片
    C#基础第四天-作业-Hashtable-list<KeyValuePair>泛型实现名片
    C#基础第三天-作业答案-集合-冒泡排序-模拟名片
    C#基础第三天-作业-集合-冒泡排序-模拟名片
    C#基础第二天-作业答案-九九乘法表-打印星星
    C#基础第二天-作业-九九乘法表-打印星星
    C#基础第一天-作业答案
    C#基础第一天-作业
    C#-string.Format对C#字符串格式化
  • 原文地址:https://www.cnblogs.com/liuyangfirst/p/12873154.html
Copyright © 2011-2022 走看看