万年历java

public void showTime(){
/*万年历 :  
1900年1月20号是星期几?
1月1号是星期一
1月8号是星期一
1月15号是星期一
1%7 = 1
8%7 = 1
15%7 = 1
★: 1. 用日期数去%7可以得到星期数 
1900年2月12号是星期几?
★: 2. 从1月1号 直到 2月12的总天数 % 7 得到星期数
★★★: 为什么要算星期几?因为在打印万年历的时候,需要知道一个月份的1号是星期几,才能正确打印之后的日期 
★★★:2015年8月1号是星期几?
1900-1-1到2015-8-1的总天数  % 7 */
int year=2017;
int month=11;
double all=0;
//从1900-1-1到year的前一年的总天数
all=getAllYearDay(year);
//从year的1月到month的前一个月的总天数
all+=getAllMonthDay(year,month);
System.out.println("总日子共有:"+all+"天");
//获得当前month的1号的对应总天数,因为这个总天数可以确定1号打印的位置(星期几)
//获得1号是星期几的数字,因为这个week数字确定1号前面的空格个数
int week=(int) (all%7);
//打印表头和1号之前的空格部分
for (int j = 0; j < week; j++) {
System.out.print(0+"\t");
}
//开始打印月历,但是你要获得该月到底要打印多少天
//开始循环打印,如果是星期天则换行
int dates=getMonthDay(year,month);
for (int i = 1; i < dates; i++) {
System.out.print(i+"\t ");
if((i+week)%7==0){
System.out.println();
}
}

}
//得到某月有多少天
int getMonthDay(int year,int month){
int dates=0;
for (int i = 1; i < month; i++) {
if(i==1||i==3||i==5||i==7||i==8||i==10||i==12){
dates=31;
}else if( i==2 && (year % 4==0 && year % 100 != 0 ||year % 400 == 0) ){
dates=29;
}else if( i==2 && !(year % 4==0 && year % 100 != 0 ||year % 400 == 0) ){
dates=28;
}else{
dates=30;
}
}
return dates;
}
//从year的1月到month的前一个月的总天数
int getAllMonthDay(int year,int month){
int all=0;
for (int i = 1; i < month; i++) {
if(i==1||i==3||i==5||i==7||i==8||i==10||i==12){
all+=31;
}else if( i==2 && (year % 4==0 && year % 100 != 0 ||year % 400 == 0) ){
all+=29;
}else if( i==2 && !(year % 4==0 && year % 100 != 0 ||year % 400 == 0) ){
all+=28;
}else{
all+=30;
}
}
return all;
}
//从1900-1-1到year的前一年的总天数
double getAllYearDay(int year){
double all=0;
for (int i = 1900; i < year; i++) {
if( i % 4==0 && i % 100 != 0 ||i % 400 == 0){
all+=366;
}else{
all+=365;
}
}
return all;

}

打印结果:

觉得有用的朋友希望可以帮忙“赞”一下哟(赠人玫瑰手有余香),谢谢^_^

 

转载于:https://www.cnblogs.com/janesyf/p/7840987.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值