PrintCalendar
2014-04-27 16:52
274 查看
import java.util.Scanner;
public class PrintCalendar {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("Enter a year: ");
int year = 0;
while(year < 1800)
year = input.nextInt();
System.out.print("Enter a month: ");
int month = 0;
while(month < 1 || month >12)
month = input.nextInt();
printCalendar(year, month);
}
static final int MONTH_DAYS[] = {0, 31, 59, 90, 120, 151, 181,
212, 243, 273, 304, 334, 365};
public static void printCalendar(int year, int month) {
printMonthTitle(year, month);
printMonthBody(year, month);
}
public static void printMonthTitle(int year, int month) {
System.out.println(" "+year + " " + getMonthName(month));
System.out.println(" SUN MON TUE WED THU FRI SAT");
}
public static String getMonthName(int month) {
switch(month) {
case 1: return "January";
case 2: return "February";
case 3: return "March";
case 4: return "April";
case 5: return "May";
case 6: return "June";
case 7: return "July";
case 8: return "August";
case 9: return "September";
case 10: return "October";
case 11: return "November";
default: return "December";
}
}
public static void printMonthBody(int year, int month) {
int startDay = getStartDay(year, month);
int numberOfDaysInMonth =
getNumberOfDaysInMonth(year, month);
for(int i = 0; i < startDay; i++)
System.out.print(" ");
for(int i = 0; i < numberOfDaysInMonth; i++) {
if((i + startDay) % 7 == 0)
System.out.printf("\n%4s", i + 1);
else
System.out.printf("%4s", i + 1);
}
}
public static int getStartDay(int year, int month) {
return
(getTotalNumberOfDays(year, month) + 3)% 7;
}
public static int getTotalNumberOfDays(
int year, int month) {
int totalNumberOfDays = 0;
for(int i = 1800; i < year; i++) {
if(isLeapYear(i))
totalNumberOfDays += 366;
else totalNumberOfDays += 365;
}
totalNumberOfDays += MONTH_DAYS[month - 1];
if(isLeapYear(year) && month > 1)
return totalNumberOfDays++;
else return totalNumberOfDays;
}
public static int getNumberOfDaysInMonth(
int year, int month) {
if (isLeapYear(year) == true && month == 2)
return MONTH_DAYS[month] - MONTH_DAYS[month - 1] + 1;
else return MONTH_DAYS[month] - MONTH_DAYS[month - 1];
}
public static boolean isLeapYear(int year) {
return year % 400 ==0 || year % 4 ==0 && year % 100 != 0;
}
}
Enter a year: 2014
Enter a month: 4
2014 April
SUN MON TUE WED THU FRI SAT
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
public class PrintCalendar {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("Enter a year: ");
int year = 0;
while(year < 1800)
year = input.nextInt();
System.out.print("Enter a month: ");
int month = 0;
while(month < 1 || month >12)
month = input.nextInt();
printCalendar(year, month);
}
static final int MONTH_DAYS[] = {0, 31, 59, 90, 120, 151, 181,
212, 243, 273, 304, 334, 365};
public static void printCalendar(int year, int month) {
printMonthTitle(year, month);
printMonthBody(year, month);
}
public static void printMonthTitle(int year, int month) {
System.out.println(" "+year + " " + getMonthName(month));
System.out.println(" SUN MON TUE WED THU FRI SAT");
}
public static String getMonthName(int month) {
switch(month) {
case 1: return "January";
case 2: return "February";
case 3: return "March";
case 4: return "April";
case 5: return "May";
case 6: return "June";
case 7: return "July";
case 8: return "August";
case 9: return "September";
case 10: return "October";
case 11: return "November";
default: return "December";
}
}
public static void printMonthBody(int year, int month) {
int startDay = getStartDay(year, month);
int numberOfDaysInMonth =
getNumberOfDaysInMonth(year, month);
for(int i = 0; i < startDay; i++)
System.out.print(" ");
for(int i = 0; i < numberOfDaysInMonth; i++) {
if((i + startDay) % 7 == 0)
System.out.printf("\n%4s", i + 1);
else
System.out.printf("%4s", i + 1);
}
}
public static int getStartDay(int year, int month) {
return
(getTotalNumberOfDays(year, month) + 3)% 7;
}
public static int getTotalNumberOfDays(
int year, int month) {
int totalNumberOfDays = 0;
for(int i = 1800; i < year; i++) {
if(isLeapYear(i))
totalNumberOfDays += 366;
else totalNumberOfDays += 365;
}
totalNumberOfDays += MONTH_DAYS[month - 1];
if(isLeapYear(year) && month > 1)
return totalNumberOfDays++;
else return totalNumberOfDays;
}
public static int getNumberOfDaysInMonth(
int year, int month) {
if (isLeapYear(year) == true && month == 2)
return MONTH_DAYS[month] - MONTH_DAYS[month - 1] + 1;
else return MONTH_DAYS[month] - MONTH_DAYS[month - 1];
}
public static boolean isLeapYear(int year) {
return year % 400 ==0 || year % 4 ==0 && year % 100 != 0;
}
}
Enter a year: 2014
Enter a month: 4
2014 April
SUN MON TUE WED THU FRI SAT
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
相关文章推荐
- 输出当前月份日历(Print a calendar of present month)
- java获得当前时间的前一天时间及Calendar 与 Date 的转换
- 解决react-native run-ios报错问题--Print: Entry, ":CFBundleIdentifier", Does Not Exist
- [jQuery]FullCalendar 备忘
- 【FullCalendar】应用——编辑与删除日程事件(五)
- WinFom 通过PrintDocument打印 不显示打印进度提示方法
- Calendar日期的使用
- android calendar
- echo print_r var_dump 区别
- 【Java常用类库】_日期操作类(Date、Calendar)笔记
- python中的4种常用的print方式
- flex打印操作(FlexPrintJob)还有分页打印操作
- 关于时间,日期,星期,月份的算法(Java中Calendar的使用方法)
- Write a method to print the last K lines of an input file using C++
- Loop doesn't see changed value without a print statement
- printstream和printwrite
- 练习 4-12 运用 printd 函数的设计思想编写一个递归版本的 itoa 函数,即通过递归 调用把整数转换为字符串
- java关于时间的操作Date与Calendar的使用
- python 中 print 函数用法总结 (一)
- Android 4.0日历(calendar)源码分析之概览