在java控制台打印日历

public static void main(String[] args) {
    
    Locale.setDefault(Locale.ENGLISH);
    GregorianCalendar d = new GregorianCalendar();
    //现在是当前月份的第几天
    int today = d.get(Calendar.DAY_OF_MONTH);
    //现在是几月份
    int month = d.get(Calendar.MONTH);
    //设置当前时间为这个月的第一天
    d.set(Calendar.DAY_OF_MONTH, 1);
    //月份第一天是星期几
    int weekday = d.get(Calendar.DAY_OF_WEEK);
    //获取一星期的第一天
    int firstDayOfWeek = d.getFirstDayOfWeek();
    int indent = 0;
    //如果月份的第一个天不是一个星期的第一天,要知道空几个空格,并把当前时间设置到一星期的第一天
    while (weekday != firstDayOfWeek) {
      indent++;
      d.add(Calendar.DAY_OF_MONTH, -1);
      weekday = d.get(Calendar.DAY_OF_WEEK);
    }

    //打印星期头
    String[] weekdayNames = new DateFormatSymbols().getShortWeekdays();
    do {
      System.out.printf("%4s", weekdayNames[weekday]);
      d.add(Calendar.DAY_OF_MONTH, 1);
      weekday = d.get(Calendar.DAY_OF_WEEK);
    }
    while (weekday != firstDayOfWeek);
    System.out.println();
    for (int i = 1; i <= indent; i++) {
      System.out.print("    ");
    }
    //设置当前时间为月初
    d.set(Calendar.DAY_OF_MONTH, 1);
    do {
      //打印天数
      int day = d.get(Calendar.DAY_OF_MONTH);
      System.out.printf("%3d", day);

      //标准当前日期
      if (day == today) {
        System.out.print("*");
      } else {
        System.out.print(" ");
      }
      d.add(Calendar.DAY_OF_MONTH, 1);
      weekday = d.get(Calendar.DAY_OF_WEEK);

      //到日期第一天,换行
      if (weekday == firstDayOfWeek){
        System.out.println();
      }
    }
    while (d.get(Calendar.MONTH) == month);
    //最后是否需要换行
    if (weekday != firstDayOfWeek){
      System.out.println();
    }
  }

一个java控制台日历程序 import java.util.Scanner; class page100_calender{ private int year; private int firstStartDay; page100_calender(int year,int firstStartDay){ this.year=year; this.firstStartDay=firstStartDay; } public void printCalender(){ for(int i=1;i<=12;i++){ printTitle(i); printMonthBody(i); System.out.println(); } } public void printTitle(int month){ System.out.println(" "+getMonthName(month)+" "+year); System.out.println("_____________________________"); System.out.println(" Sun Mon Tue Web Thu Fri Sat "); } public String getMonthName(int month){ String monthName=null; switch(month){ case 1:monthName="January"; break; case 2:monthName="February";break; case 3:monthName="Marth";break; case 4:monthName="April";break; case 5:monthName="May";break; case 6:monthName="June";break; case 7:monthName="July";break; case 8:monthName="August";break; case 9:monthName="September";break; case 10:monthName="October";break; case 11:monthName="November";break; case 12:monthName="December";break; } return monthName; } public void printMonthBody(int month){ int startDay=getStartDay(month); int numberOfDaysMonth=getNumberOfDaysInMonth(month); int i=0; for(i=0;i<startDay;i++) System.out.print(" "); for(i=1;i<=numberOfDaysMonth;i++){ if(i<10) System.out.print(" "+i); else System.out.print(" "+i); if((i+startDay)%7==0) System.out.println(); } } public int getStartDay(int month){ int Days=0; for(int i=1;i<month;i++){ Days+=getNumberOfDaysInMonth(i); } return (firstStartDay+Days)%7; } public int getNumberOfDaysInMonth(int month){ if(month==1||month==3||month==5||month==7||month==8||month==10||month==12){ return 31; } if(month==4||month==6||month==9||month==11){ return 30; } if(month==2) return isLeapYear()?29:28; return -1; } public boolean isLeapYear(){ return (year%4==0&&year%100!=0)||year%400==0; } } class page100_4_29_main{ public static void main(String[] args){ Scanner inputYear=new Scanner(System.in); System.out.println("输入年份:"); int tempYear=inputYear.nextInt(); Scanner inputFirstStartDay=new Scanner(System.in); System.out.println("该年第一天的星期:"); int tempStartDay=inputFirstStartDay.nextInt(); page100_calender calender=new page100_calender(tempYear,tempStartDay); calender.printCalender(); } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值