JAVA Swing万年历

JAVA Swing万年历

/**
*将每个月的日历返回二维数组
*/

public class Dates2 {
 
    public static String [][] weekday(int y,int m)
    {  int [] monthDay={31,28,31,30,31,30,31,31,30,31,30,31};
        int weekOfDay=Week.dateToWeek(Integer.toString(y)+"-"+Integer.toString(m)+"-01");
        String[][] days=new String[6][7];
        //将余数转换为个数
        int countYs=0;
        if(weekOfDay>0 &&weekOfDay<=6)
        {
            for (int i = 0; i < weekOfDay - 1; i++) {
                //System.out.print("\t\t\t");
                days[0][i]="\t\t\t";
                countYs+=1;
            }
        }
        else if(weekOfDay==0)
        {
            for (int j = 0; j <6; j++) {
                //System.out.print("\t\t\t");
                days[0][j]="\t\t\t";
                countYs+=1;
            }
        }
        for (int k = 0; k < monthDay[m-1]; k++) {
            String day=((k+1)+"["+ChinaDate.oneDay2(y,m,k+1)+"]\t\t");
            //把日历信息放到二维数组中即可
           //(k+countYS)/7=行号 %7=列号
            days[(k+countYs)/7][(k+countYs)%7]=day;
        }

        return  days;
    }
}


```java
//输出实时的时间 年月日以及农历
import java.text.SimpleDateFormat;
import java.util.Date;

class NowTime {
    static String Now()
    {
       // System.out.println( chinaDate.today());
        SimpleDateFormat time = new SimpleDateFormat("HH:mm:ss");
        String otime=time.format(new Date());
        //System.out.println(otime);
        return ChinaDate.today()+"\t"+otime;
    }
}

/**
*返回某月的第一天星期几
*/
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class Week {

  public static  int dateToWeek(String datetime) {
      SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd");
      //String[] weekDays = { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };
      Calendar cal = Calendar.getInstance(); // 获得一个日历
      Date datet = null;
      try {
          datet = f.parse(datetime);
          cal.setTime(datet);
      } catch (ParseException e) {
          e.printStackTrace();
      }
      int w = cal.get(Calendar.DAY_OF_WEEK) -1; // 指示一个星期中的某天。
    return w;
  }
}



/**
*农历工具类,此类参考了别人的博客
*/
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Locale;

    public class ChinaDate {
        final private static long[] lunarInfo = new long[] { 0x04bd8, 0x04ae0,
                0x0a570, 0x054d5, 0x0d260, 0x0d950, 0x16554, 0x056a0, 0x09ad0,
                0x055d2, 0x04ae0, 0x0a5b6, 0x0a4d0, 0x0d250, 0x1d255, 0x0b540,
                0x0d6a0, 0x0ada2, 0x095b0, 0x14977, 0x04970, 0x0a4b0, 0x0b4b5,
                0x06a50, 0x06d40, 0x1ab54, 0x02b60, 0x09570, 0x052f2, 0x04970,
                0x06566, 0x0d4a0, 0x0ea50, 0x06e95, 0x05ad0, 0x02b60, 0x186e3,
                0x092e0, 0x1c8d7, 0x0c950, 0x0d4a0, 0x1d8a6, 0x0b550, 0x056a0,
                0x1a5b4, 0x025d0, 0x092d0, 0x0d2b2, 0x0a950, 0x0b557, 0x06ca0,
                0x0b550, 0x15355, 0x04da0, 0x0a5d0, 0x14573, 0x052d0, 0x0a9a8,
                0x0e950, 0x06aa0, 0x0aea6, 0x0ab50, 0x04b60, 0x0aae4, 0x0a570,
                0x05260, 0x0f263, 0x0d950, 0x05b57, 0x056a0, 0x096d0, 0x04dd5,
                0x04ad0, 0x0a4d0, 0x0d4d4, 0x0d250, 0x0d558, 0x0b540, 0x0b5a0,
                0x195a6, 0x095b0, 0x049b0, 0x0a974, 0x0a4b0, 0x0b27a, 0x06a50,
                0x06d40, 0x0af46, 0x0ab60, 0x09570, 0x04af5, 0x04970, 0x064b0,
                0x074a3, 0x0ea50, 0x06b58, 0x055c0, 0x0ab60, 0x096d5, 0x092e0,
                0x0c960, 0x0d954, 0x0d4a0, 0x0da50, 0x07552, 0x056a0, 0x0abb7,
                0x025d0, 0x092d0, 0x0cab5, 0x0a950, 0x0b4a0, 0x0baa4, 0x0ad50,
                0x055d9, 0x04ba0, 0x0a5b0, 0x15176, 0x052b0, 0x0a930, 0x07954,
                0x06aa0, 0x0ad50, 0x05b52, 0x04b60, 0x0a6e6, 0x0a4e0, 0x0d260,
                0x0ea65, 0x0d530, 0x05aa0, 0x076a3, 0x096d0, 0x04bd7, 0x04ad0,
                0x0a4d0, 0x1d0b6, 0x0d250, 0x0d520, 0x0dd45, 0x0b5a0, 0x056d0,
                0x055b2, 0x049b0, 0x0a577, 0x0a4b0, 0x0aa50, 0x1b255, 0x06d20,
                0x0ada0 };
        final private static int[] year20 = new int[] { 1, 4, 1, 2, 1, 2, 1, 1, 2,
                1, 2, 1 };
        final private static int[] year19 = new int[] { 0, 3, 0, 1, 0, 1, 0, 0, 1,
                0, 1, 0 };
        final private static int[] year2000 = new int[] { 0, 3, 1, 2, 1, 2, 1, 1,
                2, 1, 2, 1 };
        public final static String[] nStr1 = new String[] { "", "正", "二", "三", "四",
                "五", "六", "七", "八", "九", "十", "冬", "腊" };
        private final static String[] Gan = new String[] { "甲", "乙", "丙", "丁", "戊",
                "己", "庚", "辛", "壬", "癸" };
        private final static String[] Zhi = new String[] { "子", "丑", "寅", "卯", "辰",
                "巳", "午", "未", "申", "酉", "戌", "亥" };
        private final static String[] Animals = new String[] { "鼠", "牛", "虎", "兔",
                "龙", "蛇", "马", "羊", "猴", "鸡", "狗", "猪" };

        private final static String[] solarTerm = new String[] { "小寒", "大寒", "立春",
                "雨水", "惊蛰", "春分", "清明", "谷雨", "立夏", "小满", "芒种", "夏至", "小暑", "大暑",
                "立秋", "处暑", "白露", "秋分", "寒露", "霜降", "立冬", "小雪", "大雪", "冬至" };
        private final static String[] sFtv = new String[] { "0101*元旦", "0214 情人节",
                "0308 妇女节", "0312 植树节", "0315 消费者权益日", "0401 愚人节", "0501 劳动节",
                "0504 青年节", "0512 护士节", "0601 儿童节", "0701 建党节", "0801 建军节",
                "0808 父亲节", "0909 mzd逝世纪念", "0910 教师节", "0928 孔子诞辰", "1001*国庆节",
                "1006 老人节", "1024 联合国日", "1112 孙中山诞辰", "1220 澳门回归", "1225 圣诞节",
                "1226 mzd诞辰" };
        private final static String[] lFtv = new String[] { "0101*农历春节",
                "0115 元宵节", "0505 端午节", "0707 七夕情人节", "0815 中秋节", "0909 重阳节",
                "1208 腊八节", "1224 小年", "0100*除夕" };

        /**
         * 传回农历 y年的总天数
         *
         * @param y
         * @return
         */
        final private static int lYearDays(int y) {
            int i, sum = 348;
            for (i = 0x8000; i > 0x8; i >>= 1) {
                if ((lunarInfo[y - 1900] & i) != 0)
                    sum += 1;
            }
            return (sum + leapDays(y));
        }

        /**
         * 传回农历 y年闰月的天数
         *
         * @param y
         * @return
         */
        final private static int leapDays(int y) {
            if (leapMonth(y) != 0) {
                if ((lunarInfo[y - 1900] & 0x10000) != 0)
                    return 30;
                else
                    return 29;
            } else
                return 0;
        }

        /**
         * 传回农历 y年闰哪个月 1-12 , 没闰传回 0
         *
         * @param y
         * @return
         */
        final private static int leapMonth(int y) {
            return (int) (lunarInfo[y - 1900] & 0xf);
        }

        /**
         * 传回农历 y年m月的总天数
         *
         * @param y
         * @param m
         * @return
         */
        final private static int monthDays(int y, int m) {
            if ((lunarInfo[y - 1900] & (0x10000 >> m)) == 0)
                return 29;
            else
                return 30;
        }

        /**
         * 传回农历 y年的生肖
         *
         * @param y
         * @return
         */
        final public static String AnimalsYear(int y) {
            return Animals[(y - 4) % 12];
        }

        /**
         * 传入 月日的offset 传回干支,0=甲子
         *
         * @param num
         * @return
         */
        final private static String cyclicalm(int num) {
            return (Gan[num % 10] + Zhi[num % 12]);
        }

        /**
         * 传入 offset 传回干支, 0=甲子
         *
         * @param y
         * @return
         */
        final public static String cyclical(int y) {
            int num = y - 1900 + 36;
            return (cyclicalm(num));
        }

        /**
         * 传出农历.year0 .month1 .day2 .yearCyl3 .monCyl4 .dayCyl5 .isLeap6
         *
         * @param y
         * @param m
         * @return
         */
        final private long[] Lunar(int y, int m) {
            long[] nongDate = new long[7];
            int i = 0, temp = 0, leap = 0;
            Date baseDate = new GregorianCalendar(1900 + 1900, 1, 31).getTime();
            Date objDate = new GregorianCalendar(y + 1900, m, 1).getTime();
            long offset = (objDate.getTime() - baseDate.getTime()) / 86400000L;
            if (y < 2000)
                offset += year19[m - 1];
            if (y > 2000)
                offset += year20[m - 1];
            if (y == 2000)
                offset += year2000[m - 1];
            nongDate[5] = offset + 40;
            nongDate[4] = 14;
            for (i = 1900; i < 2050 && offset > 0; i++) {
                temp = lYearDays(i);
                offset -= temp;
                nongDate[4] += 12;
            }
            if (offset < 0) {
                offset += temp;
                i--;
                nongDate[4] -= 12;
            }
            nongDate[0] = i;
            nongDate[3] = i - 1864;
            leap = leapMonth(i); // 闰哪个月
            nongDate[6] = 0;
            for (i = 1; i < 13 && offset > 0; i++) {
                // 闰月
                if (leap > 0 && i == (leap + 1) && nongDate[6] == 0) {
                    --i;
                    nongDate[6] = 1;
                    temp = leapDays((int) nongDate[0]);
                } else {
                    temp = monthDays((int) nongDate[0], i);
                }
                // 解除闰月
                if (nongDate[6] == 1 && i == (leap + 1))
                    nongDate[6] = 0;
                offset -= temp;
                if (nongDate[6] == 0)
                    nongDate[4]++;
            }
            if (offset == 0 && leap > 0 && i == leap + 1) {
                if (nongDate[6] == 1) {
                    nongDate[6] = 0;
                } else {
                    nongDate[6] = 1;
                    --i;
                    --nongDate[4];
                }
            }
            if (offset < 0) {
                offset += temp;
                --i;
                --nongDate[4];
            }
            nongDate[1] = i;
            nongDate[2] = offset + 1;
            return nongDate;
        }

       
        final public static long[] calElement(int y, int m, int d) {
            long[] nongDate = new long[7];
            int i = 0, temp = 0, leap = 0;
            Date baseDate = new GregorianCalendar(0 + 1900, 0, 31).getTime();
            Date objDate = new GregorianCalendar(y, m - 1, d).getTime();
            long offset = (objDate.getTime() - baseDate.getTime()) / 86400000L;
            nongDate[5] = offset + 40;
            nongDate[4] = 14;
            for (i = 1900; i < 2050 && offset > 0; i++) {
                temp = lYearDays(i);
                offset -= temp;
                nongDate[4] += 12;
            }
            if (offset < 0) {
                offset += temp;
                i--;
                nongDate[4] -= 12;
            }
            nongDate[0] = i;
            nongDate[3] = i - 1864;
            leap = leapMonth(i); // 闰哪个月
            nongDate[6] = 0;
            for (i = 1; i < 13 && offset > 0; i++) {
                // 闰月
                if (leap > 0 && i == (leap + 1) && nongDate[6] == 0) {
                    --i;
                    nongDate[6] = 1;
                    temp = leapDays((int) nongDate[0]);
                } else {
                    temp = monthDays((int) nongDate[0], i);
                }
                // 解除闰月
                if (nongDate[6] == 1 && i == (leap + 1))
                    nongDate[6] = 0;
                offset -= temp;
                if (nongDate[6] == 0)
                    nongDate[4]++;
            }
            if (offset == 0 && leap > 0 && i == leap + 1) {
                if (nongDate[6] == 1) {
                    nongDate[6] = 0;
                } else {
                    nongDate[6] = 1;
                    --i;
                    --nongDate[4];
                }
            }
            if (offset < 0) {
                offset += temp;
                --i;
                --nongDate[4];
            }
            nongDate[1] = i;
            nongDate[2] = offset + 1;
            return nongDate;
        }

        public final static String getChinaDate(int day) {
            String a = "";
            if (day == 10)
                return "初十";
            if (day == 20)
                return "二十";
            if (day == 30)
                return "三十";
            int two = (int) ((day) / 10);
            if (two == 0)
                a = "初";
            if (two == 1)
                a = "十";
            if (two == 2)
                a = "廿";
            if (two == 3)
                a = "三";
            int one = (int) (day % 10);
            switch (one) {
                case 1:
                    a += "一";
                    break;
                case 2:
                    a += "二";
                    break;
                case 3:
                    a += "三";
                    break;
                case 4:
                    a += "四";
                    break;
                case 5:
                    a += "五";
                    break;
                case 6:
                    a += "六";
                    break;
                case 7:
                    a += "七";
                    break;
                case 8:
                    a += "八";
                    break;
                case 9:
                    a += "九";
                    break;
            }
            return a;
        }

        public static String today() {
            Calendar today = Calendar.getInstance(Locale.SIMPLIFIED_CHINESE);
            int year = today.get(Calendar.YEAR);
            int month = today.get(Calendar.MONTH) + 1;
            int date = today.get(Calendar.DATE);
            long[] l = calElement(year, month, date);
            StringBuffer sToday = new StringBuffer();
            try {
                sToday.append(sdf.format(today.getTime()));
                sToday.append(" 农历");
                sToday.append(cyclical(year));
                sToday.append('(');
                sToday.append(AnimalsYear(year));
                sToday.append(")年");
                sToday.append(nStr1[(int) l[1]]);
                sToday.append("月");
                sToday.append(getChinaDate((int) (l[2])));
                return sToday.toString();
            } finally {
                sToday = null;
            }
        }
        private static SimpleDateFormat sdf = new SimpleDateFormat(
                "yyyy年M月d日 EEEEE");

        public static String oneDay(int year,int month,int day) {
            Calendar today = Calendar.getInstance(Locale.SIMPLIFIED_CHINESE);
            long[] l = calElement(year, month, day);
            StringBuffer sToday = new StringBuffer();
            try {

                SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
                Date date = null;
                String str = Integer.toString(year)+"-"+Integer.toString(month)+"-"+Integer.toString(day);
                try {
                    date = format.parse(str);
                   // System.out.println(date);
                } catch (ParseException e) {
                    e.printStackTrace();
                }
                sToday.append(sdf.format(date));
                //sToday.append(sdf.format(today.getTime()));
                sToday.append(" 农历");
                sToday.append(cyclical(year));
                sToday.append('(');
                sToday.append(AnimalsYear(year));
                sToday.append(")年");
                sToday.append(nStr1[(int) l[1]]);
                sToday.append("月");
                sToday.append(getChinaDate((int) (l[2])));
                return sToday.toString();
            } finally {
                sToday = null;
            }
        }

        public static String oneDay2(int year,int month,int day) {
            Calendar today = Calendar.getInstance(Locale.SIMPLIFIED_CHINESE);
            long[] l = calElement(year, month, day);
            StringBuffer sToday = new StringBuffer();
            try {

                SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
                Date date = null;
                String str = Integer.toString(year)+"-"+Integer.toString(month)+"-"+Integer.toString(day);
                try {
                    date = format.parse(str);
                    // System.out.println(date);
                } catch (ParseException e) {
                    e.printStackTrace();
                }
                //sToday.append(sdf.format(date));
                //sToday.append(sdf.format(today.getTime()));

                if(getChinaDate((int) (l[2])).equals("初一"))
                {
                    sToday.append(nStr1[(int) l[1]]);
                    sToday.append("月");
                }
                else if(nStr1[(int) l[1]].equals("腊")&&getChinaDate((int) (l[2])).equals("三十"))
                {
                    sToday.append("除夕");
                }
                else
                {
                    sToday.append(getChinaDate((int) (l[2])));
                }
               // sToday.append(getChinaDate((int) (l[2])));
                return sToday.toString();
            } finally {
                sToday = null;
            }
        }

        
        public static void main(String[] args) {
          
           int [] month={31,28,31,30,31,30,31,31,30,31,30,31};
           int count=0;
            for (int i = 1; i <= 12; i++) {
                for (int j = 1; j <= month[i-1]; j++) {
                   // System.out.print(i+"-"+j+"\t");
                    System.out.println(oneDay2(2018,i,j));
                }
            }

        }
    }

/**
*界面化
*/
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Calendar;

public class Ui {

    public static void main(String[] args)  {
//throws InterruptedException
       //得到当前的年份和月份,后期会用到
        Calendar cale = null;
        cale = Calendar.getInstance();
        final int[] year = {cale.get(Calendar.YEAR)};
        final int[] month = {cale.get(Calendar.MONTH) + 1};
       System.out.println(year[0]);
        System.out.println(month[0]);
        JFrame jf=new JFrame("万年历20181203【作者个人网站:www.lsk1998.xyz】注意:此万年历目前只在1900-2050年有效");
        jf.setSize(700,400);
        jf.setResizable(false);
        jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        JPanel panel=new JPanel(null);
        JTextField jTextField=new JTextField();
        JLabel jLabel1=new JLabel(year[0] +"年"+ month[0] +"月");//实时的年份/月份
        jLabel1.setFont(new Font(null,Font.PLAIN,18));
        JButton jButton1=new JButton("↑");//上一月
        jButton1.setFont(new Font(null,Font.PLAIN,18));
        JButton jButton2=new JButton("↓");//下一月
        jButton2.setFont(new Font(null,Font.PLAIN,18));
        JLabel jLabel2=new JLabel("输入年份");//年份的标签
        jLabel2.setFont(new Font(null,Font.PLAIN,15));
        JTextField jTextField1=new JTextField();//输入年份
        JLabel jLabel3=new JLabel("输入月份");//月份的标签
        jLabel3.setFont(new Font(null,Font.PLAIN,15));
        JTextField jTextField2=new JTextField();//输入月份
        JButton jButton3=new JButton("跳转到该月");//开始按钮
        jButton3.setFont(new Font(null,Font.PLAIN,15));
        String[] weekDays = { "星期一\t\t", "星期二\t\t", "星期三\t\t", "星期四\t\t", "星期五\t\t", "星期六\t\t", "星期日\t\t" };
     

        String[][] testdays=Dates2.weekday(2018,12);
        jTextField.setText(NowTime.Now());
        jTextField.setFont(new Font(null,Font.PLAIN,22));
        JTable table=new JTable(testdays,weekDays);
        table.getTableHeader().setReorderingAllowed(false);   //不可整列移动
        table.getTableHeader().setResizingAllowed(false);   //不可拉动表格
        jTextField.setBounds(0,0,700,50);
        jLabel1.setBounds(0,50,100,50);
        jButton1.setBounds(100,50,50,50);
        jButton2.setBounds(150,50,50,50);
        jLabel2.setBounds(200,50,85,50);
        jTextField1.setBounds(285,50,110,50);
        jLabel3.setBounds(395,50,85,50);
        jTextField2.setBounds(470,50,110,50);
        jButton3.setBounds(580,50,120,50);
        table.getTableHeader().setBounds(0,100,700,50);
        table.setBounds(0,150,700,350);
        table.setRowHeight(35);
        table.setFont(new Font(null,Font.PLAIN,18));
        jf.setVisible(true);
        jButton3.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                year[0]=Integer.parseInt(jTextField1.getText());
                month[0]=Integer.parseInt(jTextField2.getText());
                jLabel1.setText(year[0]+"年"+month[0]+"月");
                table.setModel(new DefaultTableModel(Dates2.weekday(year[0],month[0]),weekDays));
                System.out.println(year[0]);
                System.out.println(month[0]);
            }
        });
        //上一月功能
        jButton1.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {

                if(month[0]==1)
                {
                   year[0]-=1;
                   month[0]=12;
                    jLabel1.setText(year[0] + "年" + (month[0] ) + "月");
                    table.setModel(new DefaultTableModel(Dates2.weekday(year[0], month[0] ), weekDays));

                }
                else
                {
                    month[0]-=1;
                    jLabel1.setText(year[0] + "年" + (month[0] ) + "月");
                    table.setModel(new DefaultTableModel(Dates2.weekday(year[0], month[0] ), weekDays));
                }
                System.out.println(year[0]+"年"+(month[0] )+"月");
            }

        });
        //下一月功能
        jButton2.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
           if(month[0]<12)
           {
               month[0] +=1;
               jLabel1.setText(year[0] + "年" + (month[0] ) + "月");
               table.setModel(new DefaultTableModel(Dates2.weekday(year[0], month[0] ), weekDays));

            }
           else
           {
               year[0]+=1;
               month[0]=1;
               jLabel1.setText(year[0] + "年" + (month[0] ) + "月");
               table.setModel(new DefaultTableModel(Dates2.weekday(year[0], month[0] ), weekDays));
           }
                System.out.println(year[0]+"年"+(month[0] )+"月");
            }
        });
        //设置文本框内容:当前的时间和日期
        panel.add(jTextField);
        panel.add(jLabel1);
        panel.add(jButton1);
        panel.add(jButton2);
        panel.add(jLabel2);
        panel.add(jTextField1);
        panel.add(jLabel3);
        panel.add(jTextField2);
        panel.add(jButton3);
        panel.add(table.getTableHeader());
        panel.add(table);
        jf.add(panel);
        while(true)
        {
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            jTextField.setText(NowTime.Now());
        }

    }


}

在这里插入图片描述
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值