黑马程序员技术交流社区

标题: 一个日历小程序的实现 [打印本页]

作者: Demomiku    时间: 2015-5-3 20:50
标题: 一个日历小程序的实现
代码:
  1. package test;

  2. import java.util.*;
  3. import java.text.DateFormatSymbols;
  4. /**
  5. * @author Demomiku E-mail: 448902872@qq.com
  6. * @date 创建时间:2015年5月3日 下午8:28:14
  7. * @version 1.0   
  8. */

  9. public class MyCalendar
  10. {

  11.         public static void main(String[] args)
  12.         {
  13.                  
  14.               GregorianCalendar d = new GregorianCalendar();
  15.              
  16.               //获得今天是这几月的第几天,这个月是几月,获得的月份是实际月份-1,因为从0开始
  17.               int today = d.get(Calendar.DAY_OF_MONTH);
  18.               int month = d.get(Calendar.MONTH);

  19.               //设置日期为这个月第一天
  20.               d.set(Calendar.DAY_OF_MONTH, 1);
  21.              
  22.               //获取第一天是一个星期的第几天
  23.               int weekday = d.get(Calendar.DAY_OF_WEEK);

  24.               //获得一个星期的第一天
  25.               int firstDayOfWeek = d.getFirstDayOfWeek();

  26.               //日历开头空格的计数
  27.               int indent = 0;
  28.               while (weekday != firstDayOfWeek)
  29.               {
  30.                  indent++;
  31.                  d.add(Calendar.DAY_OF_MONTH, -1);
  32.                  weekday = d.get(Calendar.DAY_OF_WEEK);
  33.               }

  34.               //日历第一行输出星期的缩写
  35.               String[] weekdayNames = new DateFormatSymbols().getShortWeekdays();
  36.               do
  37.               {
  38.                  System.out.printf("%4s", weekdayNames[weekday]);
  39.                  d.add(Calendar.DAY_OF_MONTH, 1);
  40.                  weekday = d.get(Calendar.DAY_OF_WEEK);
  41.               }
  42.               while (weekday != firstDayOfWeek);
  43.               System.out.println();

  44.               for (int i = 1; i <= indent; i++)
  45.                  System.out.print("    ");

  46.               d.set(Calendar.DAY_OF_MONTH, 1);
  47.               do
  48.               {
  49.                       //打印日期
  50.                  int day = d.get(Calendar.DAY_OF_MONTH);
  51.                  System.out.printf("%3d", day);

  52.                  //在今天的后面加上"*"
  53.                  if (day == today) System.out.print("*");
  54.                  else System.out.print(" ");

  55.                  // 将日期+1
  56.                  d.add(Calendar.DAY_OF_MONTH, 1);
  57.                  weekday = d.get(Calendar.DAY_OF_WEEK);

  58.                  // 如果这天是一个星期的第一天则换行
  59.                  if (weekday == firstDayOfWeek) System.out.println();
  60.               }
  61.               while (d.get(Calendar.MONTH) == month);
  62.               // 如果判断到是下个月了则结束循环

  63.              
  64.               if (weekday != firstDayOfWeek) System.out.println();
  65.         }

  66. }
复制代码

截图:

1.PNG (2.57 KB, 下载次数: 9)

日历

日历





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2