一 ، جافا :
تقويم الحزمة ؛ استيراد java.util.scanner ؛ // 日历项目 الفئة العامة rili {public static void main (string [] args) {scanner a = new scanner (system.in) ؛ System.out.println ("请输入年份 :") ؛ int year = a.nextint () ؛ System.out.println ("请输入月份 :") ؛ int month = A.NextInt () ؛ int sum = 0 ؛ لـ (int i = 1900 ؛ i <year ؛ i ++) {if (i ٪ 4 == 0 && i ٪ 100! = 0 || i ٪ 400 == 0) {sum = sum+366 ؛ } آخر {sum = sum+365 ؛ }} لـ (int i = 1 ؛ i <month ؛ i ++) {if (i == 2) {if (year ٪ 4 == 0 && year ٪ 100! = 0 || year ٪ 400 == 0) {sum = sum+29 ؛} آخر {sum = sum+28 ؛ }} آخر {if (i == 4 || i == 6 || i == 9 || i == 11) {sum+= 30 ؛ } آخر {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 ؛ if (month == 4 || month == 6 || month == 9 || month == 11) {f = 30 ؛} if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) {f = 31 ؛ إذا (السنة ٪ 4 == 0 && year ٪ 100! = 0 || السنة ٪ 400 == 0) {f = 29 ؛} آخر {f = 28 ؛}} لـ (int i = 1 ؛ i <= f ؛ i ++) {if (sum ٪ 7 == 6) } آخر {system.out.print (i+"/t") ؛ } sum ++ ؛ }}}
二.
الطبقة العامة mycalendar {// 以下程序段是用来计算输入日期为该年的第几天的 public static int cptday (int year ، int month ، int day) {byte dayadd [] = {1 ، -2،1،0،0،0،1،1،0،0،0،1} ؛ // 用来存储每个月天数和 30 的差值 int daycount = 0 ؛ // 这是天数 daycount 计数器 , 初始化为 0 لـ (int i = 0 ؛ i <month-1 ؛ i ++) daycount+= (30+dayadd [i]) ؛ Daycount+= Day ؛ العودة (الشهر> 2)؟ Daycount+Isleap (السنة): DayCount ؛ } // 闰年判定程序段 , 闰年返回 1 , 平年返回 平年返回 0 static int insleap (int year) {if ((year ٪ 400 == 0) || ((year ٪ 4 == 0) && (year ٪ 100! = 0))) return 1 ؛ العودة 0 ؛ } // 计算输入日期是星期几 // 采用了基姆拉尔森计算公式 // w = (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400) mod 7 // 在公式中 d 表示日期中的日数 , m 表示月份数 表示月份数 , , y 表示年数。 表示年数。 表示年数。 注意 注意 在公式中有个与其他公式不同的地方 在公式中有个与其他公式不同的地方 在公式中有个与其他公式不同的地方 在公式中有个与其他公式不同的地方 在公式中有个与其他公式不同的地方 在公式中有个与其他公式不同的地方 在公式中有个与其他公式不同的地方 在公式中有个与其他公式不同的地方 : 在公式中有个与其他公式不同的地方 把一月和二月看成是上一年的十三月和十四月 把一月和二月看成是上一年的十三月和十四月 把一月和二月看成是上一年的十三月和十四月 如果是 如果是 如果是 如果是 如果是 如果是 如果是 如果是 如果是 则换算成 则换算成 则换算成 则换算成 如果是 如果是 则换算成 : 来代入公式计算。 注意 注意 : : : : : : : 把一月和二月看成是上一年的十三月和十四月 把一月和二月看成是上一年的十三月和十四月 把一月和二月看成是上一年的十三月和十四月 把一月和二月看成是上一年的十三月和十四月 把一月和二月看成是上一年的十三月和十四月 把一月和二月看成是上一年的十三月和十四月 把一月和二月看成是上一年的十三月和十四月 把一月和二月看成是上一年的十三月和十四月 如果是 如果是 如果是 如果是اليوم) {if (month <3) {month+= 12 ؛ السنة- } // 以下程序段是来计算输入日期为该年第几周的 public static int weekcount (int year ، int month ، int day) {int daycnt = cptday (year ، month ، day) ؛ int weekminus = getWeek (السنة ، الشهر ، اليوم) -getweek (السنة ، 1،1) ؛ int weekcnt = 0 ؛ if (daycnt ٪ 7 == 0) weekcnt = daycnt/7+((weekminus> 0)؟ 1: 0) ؛ else weekcnt = daycnt/7+((weekminus> 0)؟ 2: 1) ؛ إرجاع weekcnt ؛ } // 打印万年历 printcal static printcal (int year) {byte dayadd [] = {0،1 ، -2،1،0،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 [] = {"星期一" ، "星期二" ، "星期三" ، "星期四" ، "星期五" ، "星期六" ، "星期日"} ؛ لـ (int i = 1 ؛ i <13 ؛ i ++) {t = 0 ؛ bk = 0 ؛ if ((i == 2) && (isLeap (year) == 1)) t = 1 ؛ // 当且仅当闰年的 2月份才将其置为 1 system.out.println ("/n/t/t"+year+"年"+i+"月/n") ؛ لـ (int j = 0 ؛ j <7 ؛ j ++) system.out.print (week [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") ؛ // 循环输出每月日期 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-heile 循环接受用户输入信息 , 并利用 if-else 语句进行判断
سنة الشهر منطقية xn = false ؛ do {system.out.println ("请输入年份:") ؛ السنة = input.nextInt () ؛ System.out.println ("请输入月份:") ؛ الشهر = input.nextInt () ؛ // 利用 boolean 类型的表达式进行输入信息的判断 xn = (الشهر <1) || (الشهر> 12) || (السنة <1) ؛ if (xn) {system.out.println ("输入信息错误 , 请重新输入!") ؛ }} بينما (xn) ؛二) 、判断平闰年 , 并计算 1900 年至 (用户输入年 - 1) 的总天数
int veryearday = 0 ؛ // 每年的天数 int totalyearsdays = 0 ؛ // 计算年的天数 int inpectyearday = 0 // 记录用户输入年的天数 boolean yn = false ؛ // 标识平闰年 // 利用 for (int i = 1900 ؛ i <= year ؛ i ++) {if (((i ٪ 4 == 0) && (i ٪ 100! = 0)) || (i ٪ 400 == 0)) // 闰年的判断条件 {yn = true ؛ كل Yearday = 366 ؛ } آخر {yn = false ؛ كل Yearday = 365 ؛ } // 如果循环中的年份小于用户输入的年份 ، 则累积天数 if (i <year) {totalyearsDays = TotalyearsDays + EveryeArday ؛ } آخر {inpectyearday = earyearday ؛ System.out.println (السنة + "年 共 有:" + inpectyearday + "天") ؛ }}三) 、判断月份的天数 , 并计算当年 1月至 (用户输入月份 -1) 的天数
int eishonthday = 0 ؛ // 记录每月的天数 int totalMonthSdays = 0 ؛ // 总天数 int inpectmonthday = 0 ؛ // 记录用户输入的月份在用户输入年份的天数 // 利用 لـ 循环计算天数 لـ (int i = 1 ؛ i <= month ؛ i ++) {switch (i) {الحالة 4: الحالة 6: الحالة 9: الحالة 11: earymonthday = 30 ؛ استراحة؛ الحالة 2: if (xn) // xn 是用来记录平闰年的 boolean 类型的变量 {earymonthday = 29 ؛ } آخر {earymonthday = 28 ؛ } استراحة؛ الافتراضي: كل يوم رابي = 31 ؛ استراحة؛ } if (i <month) {totalMonthSdays = TotalMonthSdays + Everymonthday ؛ } آخر {inpectMonthDay = earyMonthday ؛ System.out.println (month + "月 共 有:" + inputMonthDay + "天") ؛ }}四) 、计算总天数 , 并计算出用户输入的月份的第一天星期几
int total = totalMonthSdays + TotalyearsDays ؛ // 计算总天数
int temp = (المجموع + 1) ٪ 7 ؛ // 判断输入月份的第一天星期几
五) 、格式化输出
// 因为我们的输入格式是 // 星期日 星期一 星期二 星期三 星期四 星期五 星期六 // 当星期日时的时候 , 我们直接输出就好了 我们直接输出就好了 , 但是当 // 第一天是星期一的时候 , 我们就必须首先打印出空格 // 然后再输出日期 , 才能让号码和星期想对应 才能让号码和星期想对应 // 打印空格 for (int spaceno = 0 ؛ spaceno <temp ؛ spaceno ++) {system.Out.print ("/t") ؛ } // 按照顺序打印号码 for (int i = 1 ؛ i <= inpectMonthDay ؛ i ++) {if ((total +i) ٪ 7) // 判断是否该换行了 {system.out.println (i) ؛ } آخر {system.out.print (i + "/t") ؛ }}四、 Java (用 التقويم 类) 写一个万年历 ، 输入年并且显示当年的日历
الفئة العامة mycalendar {public static void main (string args []) {scanner sc = new scanner (system.in) ؛ التقويم c = calendar.getInstance () ؛ System.out.println ("请输入数字年 : 比如 2014)") ؛ int year = sc.nextint () ؛ Sc.Close () ؛ // int year = 2014 ؛ C.Set (Calendar.year ، year) ؛ لـ (int i = 0 ؛ i <12 ؛ i ++) {c.set (calendar.month ، i) ؛ // c.set (Calendar.Date ، 1) ؛ // 设置成 1月 printmonth (c) ؛ }} printmonth printmonth static static static (Calendar c) {c.set (calendar.day_of_month ، 1) ؛ // 设置成一日 system.out.printf ("/n/n ============= ٪ s 月 =========/n" ، c.get (calendar.mon) +1) ؛ String [] weeks = {"日" ، "一" ، "二" ، "三" ، "四" ، "五" ، "六"} ؛ لـ (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 ؛ لـ (int i = 0 ؛ i <offday ؛ i ++) {system.out.printf ("/t") ؛ } int month = c.get (calendar.month) ؛ بينما (c.get (calendar.month) == month) {system.out.printf ("٪ d" + ((c.get (calendar.day_of_week))! = 7؟ C.Add (Calendar.day_of_month ، 1) ؛ }}} : : 万年历+时钟小程序实现
Java : Java 常用内库与工具 (التاريخ 类、 التقويم 类等)) 、异常 、异常 جرب .....
استيراد javax.swing.*؛ استيراد java.awt.*؛ استيراد java.awt.event.*؛ استيراد java.text.*؛ استيراد java.util.*؛ . jlabel [49] ؛ Jlabel y_label = new jlabel ("年份") ؛ jlabel m_label = new jlabel ("月份") ؛ jCombobox com1 = new jcombobox () x_size ، y_size ؛ string year_num ؛ calendar الآن = calendar.getInstance () ؛ // 实例化 calendArmainFrame () {super ("万年历 -jackbase") ؛ setSize (300،350) ؛ x_size = (int) (toolkit.getDefaultToolkit (). getCreensize () ght ()) ؛ setLocation ((x_size-300)/2 ، (y_size-350)/2) ؛ setDefaultCloseOperation (jframe.exit_on_close) ؛ panel1.add (y_label) ؛ panel1.add (com1) ؛ add (m_label) ؛ i = 0 ؛ i <49 ؛ i ++) {label = new jlabel ("" ، jlabel.center) ؛ // 将显示的字符设置为居中 panel2.add (label) ؛} panel3.add (جديد clock (this)) ؛ panel.add (panel1 ، borderlayout.north) ؛ panel.add (panel2 ، borderlayout.center) ؛ panel.add (panel3 ، borderlayout.south) ؛ panel.setbackground (color.white) ؛ panel1.spbackground (color.white) ؛ ActionListener () {public void actionperformed (ActionEvent e) {int c_year ، c_month ، c_week ؛ // 得到当前月份 , 并减 1 ، 计算机中的月为 0-11c_week = use (c_year ، c_month) ؛ // 调用函数 استخدم , 得到星期几 resetday (c_week ، c_year ، c_month) ؛ // 调用函数 ResetDay}}) ؛ setContentPane (لوحة) ؛ setVisible (true) ؛ setResizable (false) ؛} void public void init () {int year ، 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) ؛ // 将星期六的日期也设置为红色} 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) ؛} int public 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 ؛} resetday public void (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 ٪! = 0 || year_log ٪ 400 == 0) {// 判断是否为闰年 month_score_log = 1 ؛} month_log = month_log+1 ؛ // 将传来的月份数加 1Switch (month_log) {الحالة 1: الحالة 3: الحالة 5: الحالة 7: الحالة 8: الحالة 10: الحالة 12: الشهر _day_score = 31 ؛ } آخر {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 ؛ for (int i = week_log ؛ i <month_day_score ؛ i ++ ، count ++) {label.settext (count+"") mf) {this.mf = mf ؛ setSize (400،40) ؛ setbackground (color.hite) ؛ t = new thread (this) ؛ // 实例化线程 t.start () ؛ // 调用线程} public void run () {بينما (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 ()) ؛ .以上就是 Java 实现万年历的资料 , 希望能帮助实现该功能的朋友 , 谢谢大家对本站的支持!