输入年份,然后打印出该年的万年历,以及标识出当天日期。相似于linux下的cal -y结果。...

Java日历生成器
本文介绍了一个使用Java编写的程序,该程序能够生成指定年的详细日历,包括每个月的每一天及其对应的星期。通过判断闰年并计算从基准年2015年1月1日至目标年之间的总天数,程序确定了目标年份各月份第一天是星期几,并据此生成日历。


public class Permanent {
public static boolean isLeapYear(int year){//能被4整除但不能被100整除。或者能被400整除
boolean leapYear = false;
if((year % 100 == 0 && year % 400 == 0)||(year % 100 != 0 && year % 4 == 0)){
leapYear = true;
}
return leapYear;
}
public static int countDays(int year){//选个基准2015年1月1日,星期四
int countDays = 0;
int beginYear =year > 2015 ? 2015 : year;
int endYear = year > 2015 ?

year : 2015;

for(int i = beginYear;i < endYear;i++ ){
if(isLeapYear(i)){
countDays += 366;
}else{
countDays += 365;
}
}
return countDays;

}
public static void showCaledar(int year){
int days = countDays(year);
int weekDay = days % 7;
if(year > 2015){
weekDay = (weekDay + 4) % 7;
}else{
weekDay = (11 -weekDay) % 7;
}
String[] monthLabels = new String[]{"January","February","March","April","May","June","July","August","September","October","November","December"};
String[] weekLabels = new String[]{"Sun","Mon","Tur","Wen","Thr","Fra","Sat"};
int[] monthDay = {31,28,31,30,31,30,31,31,30,31,30,31};
for(int i = 0;i < 12;i++){
System.out.println("\n"+monthLabels[i]);
for(String weekLabel : weekLabels){ //每一周的标签
System.out.print(weekLabel + " ");
}
System.out.println(); //下一行
for(int j = 0; j < weekDay; j++){//找到第一个日期
System.out.print(" ");
}
if(isLeapYear(year)){
monthDay[1] = 29;
}else{
monthDay[1] = 28;
}
for(int k = 1;k <= monthDay[i];k++){
if((k + weekDay - 1) % 7 == 0){
System.out.println();
}
if(k < 10){ //这里是对齐的问题
System.out.print(k + " ");
}else{
System.out.print(k + " ");
}

}
weekDay = (weekDay + monthDay[i]) % 7;
}
}

public static void main(String[] args) {
showCaledar(2014);
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值