一, java 实现万年历的代码 :
Kalender paket; impor java.util.scanner; // 日历项目 kelas publik rili {public static void main (string [] args) {scanner a = new scanner (system.in); System.out.println ("请输入年份 :"); int tahun = a.nextInt (); System.out.println ("请输入月份 :"); int bulan = a.nextInt (); int sum = 0; untuk (int i = 1900; i <tahun; i ++) {if (i%4 == 0 && i%100! = 0 || i%400 == 0) {sum = sum = sum+366; } else {sum = sum+365; }} untuk (int i = 1; i <bulan; i ++) {if (i == 2) {if (tahun%4 == 0 && tahun%100! = 0 || tahun%400 == 0) {sum = jumlah+29;} else {sum = sum = sum = sum = 28; }} else {if (i == 4 || i == 6 || i == 9 || i == 11) {sum+= 30; } else {sum+= 31; }}} SUM = SUM+1; int wekday = sum%7; System.out.println ("日/t 一/t 二/t 三/t 四/t 五/t 六"); untuk (int i = 1; i <= wekday; i ++) {System.out.print ("/t"); } int f = 0; if (bulan == 4 || bulan == 6 || bulan == 9 || bulan == 11) {f = 30;} if (bulan == 1 || bulan == 3 || bulan == 5 || bulan == 7 || bulan == 8 || bulan == 10 || bulan == 12) {f = 31;} if (bulan = 2) {bulan) if (tahun%4 == 0 && tahun%100! = 0 || tahun%400 == 0) {f = 29;} else {f = 28;}} untuk (int i = 1; i <= f; i ++) {if (jumlah 7 == 6) {System.out.print (i+"/n"); } else {System.out.print (i+"/t"); } sum ++; }}}
二.一个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来代入公式计算。
Kelas Publik 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 untuk (int i = 0; i <bulan-1; i ++) daycount+= (30+dayadd [i]); daycount+= hari; kembali (bulan> 2)? Daycount+Isleap (tahun): daycount; } // 闰年判定程序段 , 闰年返回 1 , 平年返回 0 public static int isleap (int tahun) {if ((tahun%400 == 0) || ((tahun%4 == 0) && (tahun%100! = 0))) pengembalian 1; kembali 0; } // 计算输入日期是星期几 // 采用了基姆拉尔森计算公式 // w = (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400) mod 7 // 在公式中 d 表示日期中的日数 , m 表示月份数 , y 表示年数。 表示年数。 : : : : : 来代入公式计算。 来代入公式计算。 , , , , , , , , , , , , , , , , , , , , , hari) {if (bulan <3) {bulan+= 12; Tahun--;} kembali (hari+2*bulan+3*(bulan+1)/5+tahun+tahun/4 tahun/100+tahun/400)%7; } // 以下程序段是来计算输入日期为该年第几周的 public static int weekcount (tahun int, bulan int, int day) {int daycnt = cptday (tahun, bulan, hari); int weekminus = getWeek (tahun, bulan, hari) -getweek (tahun, 1,1); int weekcnt = 0; if (daycnt%7 == 0) Weekcnt = daycnt/7+((Weekminus> 0)? 1: 0); lain Weekcnt = daycnt/7+((Weekminus> 0)? 2: 1); mengembalikan Weekcnt; } // 打印万年历 public static void printcal (int tahun) {byte dayadd [] = {0,1, -2,1,0,1,0,1,1,0,1,0,1}; // 同样的 , 每月天数和 30 的差值 , 注意 , dadadd [0] 的 0 并没用到 int wkpoint = getWeek (tahun, 1,1); // wkpoint 用来指出当前日期的星期数 int t = 0; // t 用来作为一个标记器 , 解决闰年 2月有 29 天的问题 int bk = 0; // bk 用来记录需输空白的数目 string minggu [] = {"星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"}; untuk (int i = 1; i <13; i ++) {t = 0; bk = 0; if ((i == 2) && (isleap (tahun) == 1)) t = 1; // 当且仅当闰年的 2月份才将其置为 1 System.out.println ("/n/n/t/t"+tahun+"年"+i+"月/n"); untuk (int j = 0; j <7; j ++) system.out.print (minggu [j]+"/t"); System.out.println (); while (bk ++ <wkpoint) system.out.print ('/t'); untuk (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 , 并换行 lain wkpoint ++; }}} public static void main (string [] args) {string week [] = {"星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"}; System.out.println ("输入的日期是该年的第"+Cptday (2009,2,15)+"天"); System.out.println ("这一天是该年的第"+Weekcount (2009,2,15)+"周"+minggu [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 语句进行判断
tahun int; bulan int; boolean xn = false; do {system.out.println ("请输入年份:"); tahun = input.nextInt (); System.out.println ("请输入月份:"); bulan = input.nextInt (); // 利用 boolean 类型的表达式进行输入信息的判断 xn = (bulan <1) || (bulan> 12) || (tahun <1); if (xn) {System.out.println ("输入信息错误 , 请重新输入!"); }} while (xn);二)、判断平闰年 , 并计算 1900 年至(用户输入年 - 1 )的总天数
int setiap tahun = 0; // 每年的天数 int totalyearsdays = 0; // 计算年的天数 int inputyeArday = 0 // 记录用户输入年的天数 boolean yn = false; // 标识平闰年 // 利用 untuk 循环计算天数 untuk (int i = 1900; i <= tahun; i ++) {if (((i % 4 == 0) && (i % 100! = 0)) || (i % 400 == 0)) // 闰年的判断条件 {yn = true; setiap hari = 366; } else {yn = false; setiap hari = 365; } // 如果循环中的年份小于用户输入的年份, 则累积天数 if (i <tahun) {totalyearsdays = totalyearsdays + setiap tahun; } else {inputyearday = setiap tahun; System.out.println (tahun + "年 共 有:" + inputyeArday + "天"); }}三)、判断月份的天数 , 并计算当年 1月至 (用户输入月份 -1) 的天数
int setiap hari = 0; // 记录每月的天数 int totalmonthsdays = 0; // 总天数 int InputMonthday = 0; // 记录用户输入的月份在用户输入年份的天数 // 利用 untuk 循环计算天数 for (int i = 1; i <= bulan; i ++) {switch (i) {case 4: case 6: case 9: case 11: evolymerthday = 30; merusak; Kasus 2: if (xn) // xn 是用来记录平闰年的 boolean 类型的变量 {everymonthday = 29; } else {evolyminthday = 28; } merusak; Default: setiap hari = 31; merusak; } if (i <bulan) {TotalMonthSdays = TotalMonthSdays + EveryMonthday; } else {inputmonthday = setiap hari; System.out.println (bulan + "月 共 有:" + inputonthday + "天"); }}四)、计算总天数 , 并计算出用户输入的月份的第一天星期几
int total = TotalMonthSdays + TotalYearsdays; // 计算总天数
int temp = (total + 1) % 7; // 判断输入月份的第一天星期几
五)、格式化输出
// 因为我们的输入格式是 // 星期日 星期一 星期二 星期三 星期四 星期五 星期六 // 当星期日时的时候 , 我们直接输出就好了 , 但是当 但是当 // 第一天是星期一的时候 , 我们就必须首先打印出空格 // 然后再输出日期 , 才能让号码和星期想对应 // 打印空格 untuk (int spaceno = 0; spaceno <temp; spaceno ++) {System.out.print ("/t"); } // 按照顺序打印号码 untuk (int i = 1; i <= inputmonthday; i ++) {if ((total +i) % 7) // 判断是否该换行了 {System.out.println (i); } else {System.out.print (i + "/t"); }}四、 Java (用 Kalender 类) 写一个万年历, 输入年并且显示当年的日历
kelas publik mycalendar {public static void main (string args []) {scanner sc = new scanner (system.in); Kalender c = calendar.getInstance (); System.out.println ("请输入数字年 : (比如 2014)"); int tahun = sc.nextInt (); sc.close (); // int tahun = 2014; C.Set (Kalender. Tahun, tahun); untuk (int i = 0; i <12; i ++) {c.set (calendar.month, i); // C.Set (Calendar.Date, 1); // 设置成 1月 printmonth (c); }} public static void printmonth (kalender c) {c.set (calendar.day_of_month, 1); // 设置成一日 System.out.printf ("/n/n ========= %S 月 ==========/n", C.Get (Calendar.month) +1); String [] Weeks = {"日", "一", "二", "三", "四", "五", "六"}; untuk (int i = 0; i <weeks.length; i ++) {System.out.printf ("%s"+(i! = 6? "/t": "/n"), minggu [i]); } int offday = c.get (calendar.day_of_week) - 1; untuk (int i = 0; i <offday; i ++) {System.out.printf ("/t"); } int bulan = c.get (calendar.month); while (c.get (calendar.month) == bulan) {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 常用内库与工具( tanggal 类、 kalender 类等)、异常( coba ..... tangkap )、线程、 awt 图形用户界面等基础知识点。
impor javax.swing.*; impor java.awt.*; import java.awt.event.*; import java.text.*; import java.util.*; // 创建窗口和年历 Mainframe kelas memperluas jFrame {jpanel panel = jpanel baru (borderlayout baru ()); // borderlayout 为边界布局 jpanel panel1 = jpanel (); jpanel (jpanel (jpanel baru (7,7)); // gridllay 为网格布局 jpanel (JPan (7,7)); // gridllay (jpanel (7,7)); // gridllay 为网格布局 jPanel (JPANLACE (7,7)); // gridllay (JPANEL (7,7)); // gridllay (JPANEL (7,7)); // gridlllay (JPANEL (7,7)); // gridllllllllllay (JPANEL (7,7)); // gridllay (JPANEL (7.7)); [] Label = JLabel baru [49]; jlabel y_label = new jlabel ("年份"); jlabel m_label = new jlabel ("月份"); jcombobox com1 = new jcombobox (); jcombobox com2 = new jcombobox (); jcombobox (); jcombobox com2 = new jcombobox (); jcombobox (); jcombobox com2 = new jcombobox (); jcombo (); jcombobox com2 = new jcombobox (); jcoMbutton = jcOnpon "new) jbutton; jcoTon" jcoTon (jcOpon "jcOkton (JCOCTON" nEWN); re_year, re_month; int x_size, y_size; string tahun_num; kalender sekarang = calendar.getInstance (); // 实例化 calendArmainFrame () {super ("万年历 -JackBase"); setsize (300.350); x_size = (int) (toolkit.getDefaultToolKit (). Getscreensize (). GetWidth ()); y_size = (int) (toolkit.getdefaul ght ()); setlocation ((x_size-300)/2, (y_size-350)/2); setDefaultCloseOperation (jframe.exit_on_close); p anel1.add (y_label); panel1.add (com1); panel1.add (m_label); panel1.add (com2); panel1.add (tombol); untuk (int i = 0; i <49; i ++) {label = new jlabel ("", jlabel.center); // 将显示的字符设置为居中 panel2.add (label);} panel3.add (baru Jam (ini)); panel.add (panel1, borderlayout.north); panel.add (panel2, borderlayout.center); panel.add (panel3, borderlayout.south); panel.setbackground (co lor.white); panel1.setBackground (color.white); panel2.setbackground (color.white); panel3.setBackground (color.white); init (); Button.addactionListener (baru ActionListener () {public void actionPerformed (actionEvent e) {int c_year, c_month, c_week; c_year = integer.parseint (com1.getSelectedItem (). ToString ()); // 得到当前月份 , 并减 1, 计算机中的月为 0-11c_week = use (c_year, c_month); // 调用函数 Gunakan , 得到星期几 resetday (c_week, c_year, c_month); // 调用函数 resetday}}); setContentPane (panel); setVisible (true); setResizable (false);} public void init () {int tahun, bulan_num, first_day_num; for string [] = {"日", "一", "六", "五", "六", " i = 0; i <7; i ++) {label.setText (log);} untuk (int i = 0; i <49; i = i+7) {label.setForeground (color.red); // 将星期日的日期设置为红色} untuk (int i = 6; i <49; i = i+7) {label.setForeground (color.red); // 将星期六的日期也设置为红色} untuk (int i = 1; i <10000; i ++) {com1.additem (""+i);} untuk (int i = 1; i <13; i ++) {com2.additem (""+i);} bulan_num = (int) (sekarang.get (calendar.month)); // 得到当前时间的月份 tahun = (int) (now.get (calendar.year)); // 得到当前时间的年份 com1.setselectedIndex (tahun-1); // 设置下拉列表显示为当前年 com2.setselectedIndex (bulan_num); // 设置下拉列表显示为当前月 first_day_num = use (year, month_num); resetday (first_day_num, year, month_num);} Penggunaan int publik (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 bulan_day_score; // 存储月份的天数 int count; month_score_log = 0; bulan_day_score = 0; count = 1; if (year_log%4 == 0 && year_log%100! = 0 || year_log%400 == 0) {// 判断是否为闰年 bulan_score_log = 1;} bulan_log = bulan_log+1; // 将传来的月份数加 1Switch (bulan_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_score = 29; 29; 29; } else {month_day_score = 28;} break;} untuk (int i = 7; i <49; i ++) {// 初始化标签 label.setText ("");} week_log = week_log+6; // 将星期数加 6 , 使显示正确 bulan_day_score = bulan_day_score+week_log; for (int i = week_log; i <month_day_score; i ++, count ++) {label.setText (count+");}}} // 创建时钟 class clock extends canvas implement runnable {mainfras maintfrus mf) {this.mf = mf; setsize (400,40); setbackground (color.white); t = utas baru (ini); // 实例化线程 t.start (); // 调用线程} public void run () {while (true) {try {t.sleep (1000); // 休眠 1 秒钟} catch (InterruptedException e) {System.out.println ("异常");} this.repaint (100);}} public void cat (grafik g) {font f = font baru ("宋体", font.Bold, 16); SimpleDateFormat sdf = new SimpleDateFormat ("yyyy '年' mm '月' dd '日' hh: mm: ss"); // 格式化时间显示类型 kalender sekarang = calendar.getInstance (); waktu = 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 实现万年历的资料 , 希望能帮助实现该功能的朋友 , ,