时间:2021-05-20
一,Java实现万年历的代码:
二.一个Java万年历,比较简单的那种,显示年月日、星期几、当前日期是第几周、显示闰年、打印万年历等,还可显示当前日期是一年中的第几天,指定日期是星期几等,采用了基姆拉尔森计算公式 ,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 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); }}三、
1.用户输入信息-->进行信息判断(是否符合要求)
2.以1900年1月1日(星期一)为基准,计算1900年1月1日至当日的总天数
(1)先计算1900年至(用户输入的年 - 1)的总天数 -->注意平闰年之分
(2)计算用户输入年份的1月至(用户输入月份 - 1)的天数
3.计算输入月份的第一天是星期几
4.格式化输出
以下我们按照步骤一步一步进行代码解析
一)、利用do-while循环接受用户输入信息,并利用if-else语句进行判断
二)、判断平闰年,并计算1900年至(用户输入年 - 1)的总天数
三)、判断月份的天数,并计算当年1月至(用户输入月份 -1)的天数
四)、计算总天数,并计算出用户输入的月份的第一天星期几
int total = totalMonthsDays + totalYearsDays; //计算总天数
int temp = (total + 1) % 7; //判断输入月份的第一天星期几
五)、格式化输出
四、java(用calendar类)写一个万年历,输入年并且显示当年的日历
public class MyCalendar { public static void main(String args[]) { Scanner sc = new Scanner(System.in); Calendar c = Calendar.getInstance(); System.out.println("请输入数字年:(比如 2014)"); int year = sc.nextInt(); sc.close();// int year = 2014; c.set(Calendar.YEAR,year); for (int i = 0; i < 12; i++) { c.set(Calendar.MONTH,i); // c.set(Calendar.DATE,1); //设置成1月 printMonth(c); } } public static void printMonth(Calendar c){ c.set(Calendar.DAY_OF_MONTH,1); //设置成一日 System.out.printf("\n\n========= %s 月 =========\n",c.get(Calendar.MONTH)+1); String[] weeks = { "日", "一" , "二", "三", "四", "五", "六" }; for (int i = 0; i < weeks.length; i++) { System.out.printf("%s" + (i != 6 ?"\t":"\n"),weeks[i]); } int offday = c.get(Calendar.DAY_OF_WEEK) - 1; for(int i = 0; i < offday; i++){ System.out.printf("\t"); } int month = c.get(Calendar.MONTH); while(c.get(Calendar.MONTH) == month ){ System.out.printf("%d" + ( (c.get(Calendar.DAY_OF_WEEK)) != 7 ? "\t":"\n") ,c.get(Calendar.DAY_OF_MONTH)); c.add(Calendar.DAY_OF_MONTH, 1); } }}五、程序:万年历+时钟小程序实现
java知识点有:java常用内库与工具(Date类、Calendar类等)、异常(try.....catch)、线程、AWT图形用户界面等基础知识点。
import javax.swing.*;import java.awt.*;import java.awt.event.*;import java.text.*;import java.util.*; //创建窗口和年历class MainFrame extends JFrame{JPanel panel=new JPanel(new BorderLayout());//BorderLayout为边界布局JPanel panel1=new JPanel();JPanel panel2=new JPanel(new GridLayout(7,7));//GridLayout为网格布局JPanel panel3=new JPanel();JLabel []label=new JLabel[49];JLabel y_label=new JLabel("年份");JLabel m_label=new JLabel("月份");JComboBox com1=new JComboBox();JComboBox com2=new JComboBox();JButton button=new JButton("查看");int re_year,re_month;int x_size,y_size;String year_num;Calendar now=Calendar.getInstance(); //实例化CalendarMainFrame(){super("万年历-Jackbase");setSize(300,350);x_size=(int)(Toolkit.getDefaultToolkit().getScreenSize().getWidth());y_size=(int)(Toolkit.getDefaultToolkit().getScreenSize().getHeight());setLocation((x_size-300)/2,(y_size-350)/2);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);panel1.add(y_label);panel1.add(com1);panel1.add(m_label);panel1.add(com2);panel1.add(button);for(int i=0;i<49;i++){label=new JLabel("",JLabel.CENTER);//将显示的字符设置为居中panel2.add(label);}panel3.add(new Clock(this));panel.add(panel1,BorderLayout.NORTH);panel.add(panel2,BorderLayout.CENTER);panel.add(panel3,BorderLayout.SOUTH);panel.setBackground(Color.white);panel1.setBackground(Color.white);panel2.setBackground(Color.white);panel3.setBackground(Color.white);Init();button.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){int c_year,c_month,c_week;c_year=Integer.parseInt(com1.getSelectedItem().toString()); //得到当前所选年份c_month=Integer.parseInt(com2.getSelectedItem().toString())-1; //得到当前月份,并减1,计算机中的月为0-11c_week=use(c_year,c_month); //调用函数use,得到星期几Resetday(c_week,c_year,c_month); //调用函数Resetday}});setContentPane(panel);setVisible(true);setResizable(false);}public void Init(){int year,month_num,first_day_num;String log[]={"日","一","二","三","四","五","六"};for(int i=0;i<7;i++){label.setText(log);}for(int i=0;i<49;i=i+7){label.setForeground(Color.red); //将星期日的日期设置为红色}for(int i=6;i<49;i=i+7){label.setForeground(Color.red);//将星期六的日期也设置为红色}for(int i=1;i<10000;i++){com1.addItem(""+i);}for(int i=1;i<13;i++){com2.addItem(""+i);}month_num=(int)(now.get(Calendar.MONTH)); //得到当前时间的月份year=(int)(now.get(Calendar.YEAR)); //得到当前时间的年份com1.setSelectedIndex(year-1); //设置下拉列表显示为当前年com2.setSelectedIndex(month_num); //设置下拉列表显示为当前月first_day_num=use(year,month_num);Resetday(first_day_num,year,month_num);}public int use(int reyear,int remonth){int week_num;now.set(reyear,remonth,1); //设置时间为所要查询的年月的第一天week_num= (int)(now.get(Calendar.DAY_OF_WEEK));//得到第一天的星期return week_num;}public void Resetday(int week_log,int year_log,int month_log){int month_score_log; //判断是否是闰年的标记int month_day_score; //存储月份的天数int count;month_score_log=0;month_day_score=0;count=1;if(year_log%4==0&&year_log%100!=0||year_log%400==0){//判断是否为闰年month_score_log=1;}month_log=month_log+1; //将传来的月份数加1switch(month_log){case 1:case 3:case 5:case 7:case 8:case 10:case 12:month_day_score=31;break;case 4:case 6:case 9:case 11:month_day_score=30;break;case 2:if(month_score_log==1){month_day_score=29; }else{month_day_score=28;}break;}for(int i=7;i<49;i++){ //初始化标签label.setText("");}week_log=week_log+6; //将星期数加6,使显示正确month_day_score=month_day_score+week_log;for(int i=week_log;i<month_day_score;i++,count++){label.setText(count+"");}} } //创建时钟class Clock extends Canvas implements Runnable{MainFrame mf;Thread t;String time;Clock(MainFrame mf){this.mf=mf;setSize(400,40);setBackground(Color.white);t=new Thread(this); //实例化线程t.start(); //调用线程 }public void run(){while(true){try{t.sleep(1000); //休眠1秒钟}catch(InterruptedException e){System.out.println("异常");}this.repaint(100);}}public void paint(Graphics g){Font f=new Font("宋体",Font.BOLD,16); SimpleDateFormat SDF=new SimpleDateFormat("yyyy'年'MM'月'dd'日'HH:mm:ss");//格式化时间显示类型Calendar now=Calendar.getInstance();time=SDF.format(now.getTime()); //得到当前日期和时间g.setFont(f);g.setColor(Color.red);g.drawString(time,100,25);}} public class Wnl{public static void main(String [] args){JFrame.setDefaultLookAndFeelDecorated(true);MainFrame start=new MainFrame();} }以上就是Java 实现万年历的资料,希望能帮助实现该功能的朋友,谢谢大家对本站的支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
一般的电子万年历表都是挂在墙上的,如果环境潮湿的话,很可能会造成电子万年历的电路板轻微漏电,漏电以后电子万年历虽然可以走时,但是却失去了准确性。最简单的方法就是
本文实例为大家分享了C++实现简易的万年历,供大家参考,具体内容如下代码如下:/**文件名称:万年历.cpp*作者:chenghan*完成日期:2019/1/1
本文实例为大家分享了C++实现万年历的具体代码,供大家参考,具体内容如下用C++写了个简易的万年历。具体功能如下:1.打印指定年(用户输入)所有月份的年历2.打
万年历调时间的方法是: 1、万年历后面有四个键分别为上调、下调、设置、退回,先按“设置”键进入时间设置状态,同时年份“闪烁”,可按“上调”或“下调”键修改年份
各位使用中华万年历的伙伴们,知道在其中如何查看星座吗?不知道的话可以随着小编去下面文章中看看中华万年历中查看星座的操作方法。 1.打开软件,点击页面右下角生