public class myCalendar {
//以下程序段是用来计算输入日期为该年的第几天的
public static int cptDay(int year , int month , int day){
byte dayadd[]={1,-2,1,0,1,0,1,1,0,1,0,1}; //用来存储每个月天数和30的差值
int daycount = 0; //这是天数daycount计数器,初始化为0
for(int i=0; i<month-1; i++)
daycount+=(30+dayadd[i]);
daycount+=day;
return (month>2)?daycount+isLeap(year):daycount;
}
//闰年判定程序段,闰年返回1,平年返回0
public static int isLeap(int year){
if((year%400==0)||((year%4==0)&&(year%100!=0)))
return 1;
return 0;
}
//计算输入日期是星期几
//采用了基姆拉尔森计算公式
//W= (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400) mod 7
//在公式中d表示日期中的日数,m表示月份数,y表示年数。
//注意:在公式中有个与其他公式不同的地方:
//把一月和二月看成是上一年的十三月和十四月,例:如果是2004-1-10则换算成:2003-13-10来代入公式计算。
public static int getWeek(int year,int month,int day){
if(month<3)
{ month+=12; year--;}
return (day+2*month+3*(month+1)/5+year+year/4-year/100+year/400)%7;
}
//以下程序段是来计算输入日期为该年第几周的
public static int weekCount(int year,int month,int day){
int dayCnt = cptDay(year,month,day);
int weekminus = getWeek(year,month,day)-getWeek(year,1,1);
int weekCnt = 0;
if(dayCnt%7==0) weekCnt = dayCnt/7+((weekminus>0)?1:0);
else weekCnt = dayCnt/7+((weekminus>0)?2:1);
return weekCnt;
}
//打印万年历
public static void printCal(int year){
byte dayadd[]={0,1,-2,1,0,1,0,1,1,0,1,0,1}; //同样的,每月天数和30的差值,注意,dadadd[0]的0并没用到
int wkpoint = getWeek(year,1,1); //wkpoint用来指出当前日期的星期数
int t = 0; //t用来作为一个标记器,解决闰年2月有29天的问题
int bk = 0; //bk用来记录需输空白的数目
String week[]={"星期一","星期二","星期三","星期四","星期五","星期六","星期日"};
for(int i=1;i<13;i++)
{
t = 0;
bk = 0;
if((i==2)&&(isLeap(year)==1))
t = 1; //当且仅当闰年的2月份才将其置为1
System.out.println("\n\n\t\t"+year+" 年 "+i+" 月\n");
for(int j=0;j<7;j++)
System.out.print(week[j]+"\t");
System.out.println();
while(bk++<wkpoint)
System.out.print('\t');
for(int j=1;j<=(30+dayadd[i]+t);j++)
{
System.out.print(j+"\t"); //循环输出每月日期
if(wkpoint==6)
{ wkpoint = 0; System.out.print('\n');} //当wkpoint计数器为6时将其置为0,并换行
else
wkpoint++;
}
}
}
public static void main(String[] args){
String week[]={"星期一","星期二","星期三","星期四","星期五","星期六","星期日"};
System.out.println("输入的日期是该年的第"+cptDay(2009,2,15)+"天");
System.out.println("这一天是该年的第"+weekCount(2009,2,15)+"周 "+week[getWeek(2009,2,15)]);
printCal(2009);
}
}
基于Java的Calendar万年历.zip
98 浏览量
2023-06-15
00:46:15
上传
评论
收藏 4KB ZIP 举报
快乐无限出发
- 粉丝: 1127
- 资源: 7265
最新资源
- sony 索尼IMX334摄像头模组电路板AD版硬件PCB图(6层板).zip
- 基于flask和echarts融合交易策略的bitfinex可视化微服务.zip
- 包含了wvp-assist.tar wvp-talk.tar zlmediakit.tar .
- 3r4efgh53wgrf43tw
- 2024新版Java基础从入门到精通全套视频+资料下载
- Spring AI大模型视频教程+ChatGPT视频教程+OpenAI大模型视频教程(资料+视频教程)
- ABB工业机器人教程PDF版本
- 123321123323211
- yolov8实战第八天-pyqt5-yolov8实现车牌识别系统(论文(8700+字+数据集+完整部署代码+代码使用说明)
- 三相桥式全桥整流电路MATALB Simulink仿真文件
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈