用Java编写日历表(3种方式)

本文介绍了如何使用Java编程实现日历表,详细讲解了三种不同的实现方式:不依赖Java内置类、使用Calendar类以及使用LocalDate类。通过分析日历表的特征,确定需要获取年份、月份、月初星期和月天数。文章展示了具体代码实现,并在main函数中运行展示结果,强调了学习过程中不断开阔视野和深化理解的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

大家好,今天我和大家分享一下用Java编写日历表,我用了3种方式实现这一功能的。

首先我们来看看一个日历表有什么特征。在这里我就把我电脑上的日历表截下来分析一下

 

我们从上向下看:这个日历表显示了年份,月份,星期数即星期一到星期日,每一天对应一个星期数,天数每隔七天换一下行,当月的总天数。还有一个就是每个月的第一天是接着上个月的最后一天的。

我们发现我们想要创建一个日历表就只需要知道年份,月份和该月份的第一天是星期几还有就是该月份的总天数就行。

年份和月份是我们自己设置要查看的年份和月份,每个月的总天数我们都是知道的,只要知道月份就能知道该月份的总天数,不过2月份除外,2月份的总天数需要判断该年是平年还是闰年。最后一个问题就是怎么样获取该月份的第一天是星期几?在上面我提到过每个月的第一天是接着上个月的最后一天的,并且1900年1月1日是星期一,我们可以把从1900年到我们指定日期的前一个月的总天数求出来对7取余,就是上一个月最后一天的星期数(也是这个月开始前面的空格数)。

我写的第一种方式:不用Java中的类,

获取从1900年到我们指定日期的前一个月的总天数

 //指定的日历年份
    public static int year;
    //指定的日历月份
    public static int month;
​
    //获得总天数
    public static int getDaysFrom1900() {
        int days = 0;
        //统计从1900年到指定日历年份的前一年的天数
        for (int i = 1900; i < year; i++) {
            days += isLeapYear(i) ? 366 : 365;
        }
        //统计从一月到指定日历月份的前一个月的天数
        for (int i = 1; i < month; i++) {
            days += getDaysFromMonth(i);
        }
        return days;
    }
 //获取指定月份的天数
    private static int getDaysFromMonth(int month) {
        switch (month) {
            case 1:
            case 3:
            ca
ublic class JCalendar extends JPanel{ //动态表示年月日 private int year=0; private int month=0; private int day=0; private int first = 0; //用于标志日历面板是否显示 private static boolean isShow = false; //主面板 private JPanel Main = new JPanel(); //日面板 private JPanel jPanelDay = new JPanel(); //月面板 private JPanel jPanelMonth = new JPanel(); //月的输入位置 private JTextField Month = new JTextField(); //减少月份 private JButton MonthDown = new JButton(); //增加月份 private JButton MonthUp = new JButton(); private JPanel jPanelButton = new JPanel(); //减少年份 private JButton YearDown = new JButton(); //增加年份 private JButton YearUp = new JButton(); //显示日期的位置 private JLabel Out = new JLabel(); public JLabel Out2 = new JLabel(); private Locale l=Locale.CHINESE; //主日历 private GregorianCalendar cal=new GregorianCalendar(l); //星期面板 private JPanel weekPanel=new JPanel(); //天按钮组 private JToggleButton[] days=new JToggleButton[42]; //天面板 private JPanel Days = new JPanel(); //标示 private JLabel jLabel1 = new JLabel(); private JLabel jLabel2 = new JLabel(); private JLabel jLabel3 = new JLabel(); private JLabel jLabel4 = new JLabel(); private JLabel jLabel5 = new JLabel(); private JLabel jLabel6 = new JLabel(); private JLabel jLabel7 = new JLabel(); //当前选择的天数按钮 private JToggleButton cur=null; //月份天数数组,用来取得当月有多少天 // 1 2 3 4 5 6 7 8 9 10 11 12 private int[] mm={31,28,31,30,31,30,31,31,30,31,30,31}; //空日期构造函数 public JCalendar() { try { jbInit(); } catch(Exception e) { e.printStackTrace(); } } //带日期设置的构造函数 public JCalendar(int year, int month, int day) { cal.set(year, month, day); try { jbInit(); } catch (Exception e) { e.printStackTrace(); }
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值