一, Java 实现万年历的代码:
ปฏิทินแพ็คเกจ นำเข้า java.util.scanner; // 日历项目คลาสสาธารณะ rili {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {สแกนเนอร์ a = สแกนเนอร์ใหม่ (System.in); System.out.println ("请输入年份:"); int year = a.nextint (); System.out.println ("请输入月份:"); int เดือน = A.Nextint (); int sum = 0; สำหรับ (int i = 1900; i <ปี; i ++) {ถ้า (i%4 == 0 && i%100! = 0 || i%400 == 0) {sum = sum+366; } else {sum = sum+365; }} สำหรับ (int i = 1; i <month; i ++) {ถ้า (i == 2) {ถ้า (ปี%4 == 0 && ปี%100! = 0 || ปี 400 == 0) {sum = sum+29;} อื่น {sum = sum+28; }} else {ถ้า (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 六"); สำหรับ (int i = 1; i <= wekday; i ++) {system.out.print ("/t"); } int f = 0; ถ้า (เดือน == 4 || เดือน == 6 || เดือน == 9 || เดือน == 11) {f = 30;} ถ้า (เดือน == 1 || เดือน == 3 || เดือน == 5 || เดือน == 7 || เดือน == 8 || เดือน == 10 || เดือน == 12) {f = 31; ถ้า (ปี%4 == 0 && ปี%100! = 0 || ปี%400 == 0) {f = 29;} else {f = 28;}} สำหรับ (int i = 1; i <= f; i ++) {ถ้า (รวม%7 == 6) } 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 表示月份数表示月份数::::
Mycalendar ชั้นเรียนสาธารณะ {// 以下程序段是用来计算输入日期为该年的第几天的 public Static int cptday (int ปี, เดือน int, วัน int) {byte dayadd [] = {1, -2,1,0,1,0,1,1,0,1,0,0,1}; // 用来存储每个月天数和 30 的差值 int daycount = 0; // 这是天数 daycount 计数器, 初始化为 0 สำหรับ (int i = 0; i <month-1; i ++) daycount+= (30+dayadd [i]); dayCount+= วัน; return (เดือน> 2)? daycount+isleap (ปี): daycount; } // 闰年判定程序段, 闰年返回 1, 平年返回 0 ISLEAP INLEAP สาธารณะคงที่ (ปี) {ถ้า ((ปี%400 == 0) || ((ปี%4 == 0) && (ปี%100! = 0)) กลับ 1; กลับ 0; } // 计算输入日期是星期几 // 采用了基姆拉尔森计算公式 // w = (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400) mod 7 // 在公式中 d 表示日期中的日数, m 表示月份数, y 表示年数。 // 注意: 在公式中有个与其他公式不同的地方:: // 把一月和二月看成是上一年的十三月和十四月,,::::::: วัน) {ถ้า (เดือน <3) {เดือน+= 12; ปี-;} return (วัน+2*เดือน+3*(เดือน+1)/5+ปี+ปี/4 ปี/100+ปี/400)%7; } // 以下程序段是来计算输入日期为该年第几周的 INT สาธารณะคงที่สาธารณะ (ปี int, เดือน int, วัน int) {int daycnt = cptday (ปี, เดือน, วัน); int WeekMinus = Getweek (ปี, เดือน, วัน)-Getweek (ปี, 1,1); int weekcnt = 0; ถ้า (daycnt%7 == 0) Weekcnt = daycnt/7+((WeekMinus> 0)? 1: 0); else weekcnt = daycnt/7+((WeekMinus> 0)? 2: 1); กลับ Weekcnt; } // 打印万年历โมฆะคงที่สาธารณะ printcal (int ปี) {byte dayadd [] = {0,1, -2,1,0,1,0,1,1,1,0,1,0,1}; // 同样的, 每月天数和 30 的差值, 注意, dadadd [0] 的 0 并没用到 int wkpoint = getweek (ปี, 1,1); // wkpoint 用来指出当前日期的星期数 int t = 0; // t 用来作为一个标记器, 解决闰年2月有 29 天的问题 int bk = 0; // bk 用来记录需输空白的数目สตริงสัปดาห์ [] = {"星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"}; สำหรับ (int i = 1; i <13; i ++) {t = 0; bk = 0; if ((i == 2) && (isleap (ปี) == 1)) t = 1; // 当且仅当闰年的2月份才将其置为 1 system.out.println ("/n/n/t/t"+ปี+"年"+i+"月/n"); สำหรับ (int j = 0; j <7; j ++) system.out.print (สัปดาห์ [j]+"/t"); System.out.println (); ในขณะที่ (bk ++ <wkpoint) system.out.print ('/t'); สำหรับ (int j = 1; j <= (30+dayadd [i]+t); j ++) {system.out.print (j+"/t"); // 循环输出每月日期ถ้า (wkpoint == 6) {wkpoint = 0; System.out.print ('/n');} // 当 wkpoint 计数器为 6 时将其置为 0, 并换行 else wkpoint ++; }}} โมฆะคงที่สาธารณะหลัก (สตริง [] args) {สตริงสัปดาห์ [] = {"星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"}; System.out.println ("输入的日期是该年的第"+cptday (2009,2,15)+"天"); System.out.println ("这一天是该年的第"+WeekCount (2009,2,15)+"周"+สัปดาห์ [Getweek (2009,2,15)]); Printcal (2009); -三、
1. 用户输入信息-> 进行信息判断 (是否符合要求)
2. 以 1900 年1月 1 日 (星期一) 为基准, 计算 1900 年1月1日至当日的总天数
(1) 先计算 1900 年至 (用户输入的年 -1) 的总天数 -> 注意平闰年之分
(2) 计算用户输入年份的1月至 (用户输入月份 - 1) 的天数
3. 计算输入月份的第一天是星期几
4. 格式化输出
以下我们按照步骤一步一步进行代码解析
一) 、利用 、利用 ในขณะที่循环接受用户输入信息, 并利用 if-else 语句进行判断
Int ปี; เดือน int; บูลีน xn = false; ทำ {system.out.println ("请输入年份:"); ปี = input.nextint (); System.out.println ("请输入月份:"); เดือน = input.nextint (); // 利用บูลีน类型的表达式进行输入信息的判断 xn = (เดือน <1) || (เดือน> 12) || (ปี <1); if (xn) {system.out.println ("输入信息错误, 请重新输入!"); }} ในขณะที่ (xn);二) 、判断平闰年, 并计算 1900 年至(用户输入年 - 1) 的总天数
int ทุก ๆ วัน = 0; // 每年的天数 int totalyearsdays = 0; // 计算年的天数 intputyearday = 0 // 记录用户输入年的天数บูลีน yn = false; // 标识平闰年 // 利用สำหรับ循环计算天数สำหรับ (int i = 1900; i <= ปี; i ++) {ถ้า (((i % 4 == 0) && (i % 100 = 0)) || (i % 400 == 0)) // 闰年的判断条件 {yn = true; ทุก ๆ วัน = 366; } else {yn = false; ทุก ๆ วัน = 365; } // 如果循环中的年份小于用户输入的年份, 则累积天数 if (i <ปี) {TotalyearsDays = TotalYearSdays + ทุก ๆ วัน; } else {inputyearday = ทุก ๆ วัน; System.out.println (ปี + "年共有:" + inputyearday + "天"); -三) 、判断月份的天数, 并计算当年1月至 (用户输入月份 -1) 的天数
int ทุกเดือน = 0; // 记录每月的天数 int totalMonthSdays = 0; // 总天数 int inputMonthday = 0; // 记录用户输入的月份在用户输入年份的天数 // 利用สำหรับ循环计算天数สำหรับ (int i = 1; i <= เดือน; i ++) {switch (i) {กรณีที่ 4: กรณีที่ 6: กรณีที่ 9: กรณีที่ 11: Everymonthday = 30; หยุดพัก; กรณีที่ 2: ถ้า (xn) // xn 是用来记录平闰年的บูลีน类型的变量 {Everymonthday = 29; } else {Everymonthday = 28; } หยุดพัก; ค่าเริ่มต้น: ทุกวันวัน = 31; หยุดพัก; } if (i <เดือน) {TotalMonthSdays = TotalMonthSdays + Everymonthday; } else {inputMonthday = ทุกวันวัน; System.out.println (เดือน + "月共有:" + inputmonthday + "天"); -四) 、计算总天数,,
int total = totalMonthSdays + totalyearsdays; // 计算总天数
int temp = (รวม + 1) % 7; // 判断输入月份的第一天星期几
五))
// 因为我们的输入格式是 // 星期日星期二星期四星期六 // 当星期日时的时候, 我们直接输出就好了但是当但是当 // 第一天是星期一的时候, 我们就必须首先打印出空格我们就必须首先打印出空格 // 然后再输出日期, 才能让号码和星期想对应才能让号码和星期想对应才能让号码和星期想对应 // 打印空格สำหรับ (int spaceno = 0; spaceno <temp; spaceno ++) {system.out.out.print ("/t"); } // 按照顺序打印号码สำหรับ (int i = 1; i <= inputMonthday; i ++) {ถ้า ((ทั้งหมด +i) % 7) // 判断是否该换行了 {system.out.println (i); } else {system.out.print (i + "/t"); -四、 Java (用ปฏิทิน类) 写一个万年历, 输入年并且显示当年的日历
Mycalendar คลาสสาธารณะ {โมฆะคงที่สาธารณะหลัก (String args []) {Scanner sc = สแกนเนอร์ใหม่ (System.in); ปฏิทิน C = Calendar.getInstance (); System.out.println ("请输入数字年 (比如 2014)"); int year = sc.nextint (); sc.close (); // int ปี = 2014; C.Set (ปฏิทินปี, ปี); สำหรับ (int i = 0; i <12; i ++) {c.set (calendar.month, i); // C.Set (Calendar.date, 1); // 设置成1月 printmonth (c); }} โมฆะคงที่สาธารณะ printmonth (ปฏิทิน c) {c.set (calendar.day_of_month, 1); // 设置成一日 system.out.printf ("/n/n ========== %s 月 ==========/n", c.get (calendar.month) +1); สตริง [] สัปดาห์ = {"日", "一", "二", "三", "四", "五", "六"}; สำหรับ (int i = 0; i <สัปดาห์ความยาว; i ++) {system.out.printf ("%s"+(i! = 6? "/t": "/n"), สัปดาห์ [i]); } int offday = c.get (calendar.day_of_week) - 1; สำหรับ (int i = 0; i <Offday; i ++) {system.out.printf ("/t"); } int month = c.get (calendar.month); ในขณะที่ (c.get (calendar.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 常用内库与工具( วันที่ 类、 ปฏิทิน类等) 、异常( ลอง ..... จับได้) 、线程、 awt 图形用户界面等基础知识点。
นำเข้า Javax.swing.*; นำเข้า Java.awt.*; นำเข้า Java.awt.event.*; นำเข้า Java.Text.*; นำเข้า Java.util.*; // 创建窗口和年历เมนเฟรมคลาสขยาย JFrame {JPANEL PANEL = ใหม่ JPANEL (ใหม่ BorderLayout ()); // BorderLayout 为边界布局 JPANEL PANEL1 = JPANEL ใหม่ (); JPANEL PANEL2 = JPANEL ใหม่ (New GridLayout (7,7); jlabel [49]; jlabel y_label = new jlabel ("年份"); jlabel m_label = new Jlabel ("月份"); jcombobox com1 = jcomboBox () jbombox com2 = new JcomboBox (jbutton buttton; X_SIZE, Y_SIZE; String Year_num; ปฏิทินตอนนี้ = Calendar.getInstance (); // 实例化 calendarmainframe () {super ("万年历 -jackbase"); setsize (300,350); x_size = (int) (toolkit.getDefaultToolkit (). getScreensize () getWidth () ght ()); 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); i = 0; i <49; i ++) {label = new jlabel ("", jlabel.center); // 将显示的字符设置为居中 panel2.add (label);} panel3.add (ใหม่ นาฬิกา (นี่)); 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 (ใหม่ ActionListener () {โมฆะสาธารณะ ActionPerformed (ActionEvent E) {int c_year, c_month, c_week; c_year = integer.parseint (com1.getSelectedItem (). TOSTRING (); // 得到当前月份, 并减 1, 计算机中的月为 0-11c_week = ใช้ (c_year, c_month); // 调用函数ใช้, 得到星期几รีเซ็ตวัน (c_week, c_year, c_month); // 调用函数 resetday}}); setContentPane (พาเนล); setVisible (จริง); setResizable (เท็จ);} โมฆะสาธารณะเริ่มต้น () {int, month_num, first_day_num; สตริงบันทึก [] = {",", ",", ",", ",", ",", ",", " i = 0; i <7; i ++) {label.settext (log);} สำหรับ (int i = 0; i <49; i = i+7) {label.setforeground (color.red); // 将星期日的日期设置为红色} สำหรับ (int i = 6; i <49; i = i+7) {label.setforeground (color.red); // 将星期六的日期也设置为红色} สำหรับ (int i = 1; i <10000; i ++) {com1.additem (""+i); i = 1; i <13; i ++) {com2.additem (""+i);} month_num = (int) (ตอนนี้ get (calendar.month)); // 得到当前时间的月份ปี = (int) (ตอนนี้ get (calendar.year)); // 得到当前时间的年份 com1.setselectedIndex (ปี -1); // 设置下拉列表显示为当前年 com2.setselectedIndex (month_num); // 设置下拉列表显示为当前月 first_day_num = ใช้ (ปี, month_num); resetday (first_day_num, ปี, month_num);} การใช้งานสาธารณะสาธารณะ (int reyear, int remonth) {int week_num; now.set (Reyear, Remonth, 1); // 设置时间为所要查询的年月的第一天 week_num = (int) (ตอนนี้ get (calendar.day_of_week)); // 得到第一天的星期 return week_num;} โมฆะสาธารณะ 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 = เดือน // 将传来的月份数加 1Switch (month_log) {กรณีที่ 1: กรณีที่ 3: กรณีที่ 5: กรณีที่ 7: กรณีที่ 8: กรณีที่ 10: กรณีที่ 12: Month_day_Score = 31; Break; กรณีที่ 4: กรณีที่ 6: กรณีที่ 9: กรณีที่ 11: Month_day_Score = 30; } else {month_day_score = 28;} break;} สำหรับ (int i = 7; i <49; i ++) {// 初始化标签 label.settext ("");} week_log = Week_log+6; // 将星期数加 6, 使显示正确 month_day_score = month_day_score+Week_log; สำหรับ (int i = week_log; i <month_day_score; i ++, count ++) {label.settext (count+"");}}} // 创建时钟 class class class mf) {this.mf = mf; setsize (400,40); setBackground (color.white); t = เธรดใหม่ (นี้); // 实例化线程 t.start (); // 调用线程} โมฆะสาธารณะเรียกใช้ () {ในขณะที่ (จริง) {ลอง {t.sleep (1,000); // 休眠 1 秒钟} catch (interruptedException e) {system.out.println ("异常");} this.repaint (100);}} สีโมฆะสาธารณะ (กราฟิก g) {ตัวอักษร f = ตัวอักษรใหม่ ("宋体", font.bold, 16); SimpledateFormat SDF = new SimpledateFormat ("yyyy '年' mm '月' dd '日' hh: mm: ss"); // 格式化时间显示类型ปฏิทินตอนนี้ = calendar.getInstance (); เวลา = sdf.format (ตอนนี้ // 得到当前日期和时间 g.setfont (f); g.setcolor (color.red); g.drawstring (เวลา, 100,25);}} คลาสสาธารณะ wnl {โมฆะสาธารณะคง以上就是 Java 实现万年历的资料, 希望能帮助实现该功能的朋友, 谢谢大家对本站的支持!