A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Jaybor 中级黑马   /  2015-2-10 23:53  /  984 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在java核心基础上看到这道题
  1. import java.text.DateFormatSymbols;
  2. import java.util.Calendar;
  3. import java.util.GregorianCalendar;
  4. import java.util.Locale;

  5. /*
  6. * 需求:打印出当前月的日历,并且在当前天数前加上"*"号
  7. * 实现:1.生成一个Gregorian Calendar的实例gc
  8. *     2.得到当前的月份和日期
  9. *     3.将gc设定为本月第一天,得到它的DAY_OF_WEEK值(星期天为1,星期六为7)
  10. *     4.得到firstDayOfWeek,默认为1;然后do while循环,将gc对应为本月1号所在星期的星期日;
  11. *     5.接下来打印星期X(从星期日-星期六):用do while循环以及SimpleDateSymbols类的getShortWeekdays()方法得到的字符串数组。
  12. *     循环知道DAY_OF_WEEK值为firstDayOfWeek为止;
  13. *     6.再打印DAY_OF_MONTH,要从1号开始,所以首先要将gc重置为本月的第一天,然后运用do while循环将day打印出来;
  14. *     当打印到星期六时要求换行打印,在当前日期后要求加一个星号;循环退出条件为month(初始)==gc.get(Calendar.MONTH);
  15. */
  16. public class CalendarDemo
  17. {
  18.     public static void main(String[] args)
  19.         {
  20.             //得到GregorianCalendar的实例
  21.             GregorianCalendar gc=new GregorianCalendar();
  22.            
  23.             //得到当前的月份和日期:
  24.             int month=gc.get(Calendar.MONTH);
  25.             int today=gc.get(Calendar.DAY_OF_MONTH);
  26.                            
  27.             /*将gc设置为本月的第一天,并且得到这一天是星期几
  28.              * 从周日到周六DAY_OF_WEEK从1-7;
  29.              */
  30.             gc.set(Calendar.DAY_OF_MONTH,1);
  31.             int weekday=gc.get(Calendar.DAY_OF_WEEK);   
  32.            
  33.             //设置时区:
  34.             Locale.setDefault(Locale.US);
  35.            
  36.             //获得当前地区星期的起始日:
  37.             int firstDayOfWeek=gc.getFirstDayOfWeek();
  38.            
  39.             //将gc重置,知道gc所对应的日期是本月第一个星期的星期天;
  40.             while(weekday!=firstDayOfWeek)
  41.             {
  42.                     gc.add(Calendar.DAY_OF_MONTH,-1);
  43.                     weekday=gc.get(Calendar.DAY_OF_WEEK);
  44.             }

  45.             //输出表示星期几的头:
  46.             String[] weekdayNames=new DateFormatSymbols().getShortWeekdays();
  47.             do
  48.             {
  49.                     System.out.printf("%4s",weekdayNames[weekday]);//最先打印出来的是一星期中的第一天
  50.                     gc.add(Calendar.DAY_OF_MONTH,1);//将gc所代表的日子往后推1天;
  51.                     weekday=gc.get(Calendar.DAY_OF_WEEK);
  52.             }
  53.             while(firstDayOfWeek!=weekday);
  54.             System.out.println();
  55.            
  56.             gc.set(Calendar.DAY_OF_MONTH, 1);
  57.             //打印出日期,从当月的1号开始打印:
  58.             do
  59.             {
  60.                     int day=gc.get(Calendar.DAY_OF_MONTH);
  61.                    
  62.            
  63.                     //print day
  64.             System.out.printf("%3d",day);
  65.             
  66.             //在当前日期后加星号
  67.                     if(day==today)
  68.             System.out.print("*");
  69.             else
  70.             System.out.print(" ");
  71.                    
  72.             gc.add(Calendar.DAY_OF_MONTH, 1);
  73.             weekday=gc.get(Calendar.DAY_OF_WEEK);
  74.             //如果打印到星期六了,那么下次打印前就得先换行
  75.             if(weekday==firstDayOfWeek)
  76.                     System.out.println();
  77.             
  78.             
  79.             }
  80.             while(gc.get(Calendar.MONTH)==month);
  81.         }
  82. }
复制代码

1 个回复

倒序浏览
貌似有点复杂。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马