Swing 写的日期时间组件

jopen 11年前

在网上收集的swing时间组件完善了一下,日期上下按钮可以点击,闰年平年判断,月份是多少天自动更新改变。希望大家继续完善。

MainApp

import java.awt.Dimension;  import java.awt.Toolkit;  import java.awt.event.WindowAdapter;  import java.awt.event.WindowEvent;    import javax.swing.JButton;  import javax.swing.JFrame;  import javax.swing.JOptionPane;  import javax.swing.JPanel;       public class MainApp  extends JFrame {         public static int x=0;    public static int y=0;   /**    * @param args    */   public static void main(String[] args) {          JFrame jf = new JFrame();     JPanel tabPanel = new JPanel();     JButton timeButton = new DataChooser();     tabPanel.add(timeButton);     jf.add(tabPanel);     jf.setBounds(350, 200, 500, 400);     jf.setVisible(true);     jf.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);     jf.addWindowListener(new WindowAdapter(){                          public void windowClosing(WindowEvent e){                            int n=JOptionPane.showConfirmDialog(null,"确认退出吗?","确认对话框",                                                     JOptionPane.YES_NO_OPTION );                            if(n==JOptionPane.YES_OPTION)                                 {System.exit(0);}                            return;                          }});                   jf.setEnabled(true);   }         }
DataChooser
   import java.awt.BorderLayout;  import java.awt.Color;  import java.awt.Cursor;  import java.awt.Dimension;  import java.awt.FlowLayout;  import java.awt.Font;  import java.awt.Frame;  import java.awt.GridLayout;  import java.awt.Point;  import java.awt.Toolkit;  import java.awt.event.ActionEvent;  import java.awt.event.ActionListener;  import java.text.ParseException;  import java.text.ParsePosition;  import java.text.SimpleDateFormat;  import java.util.Calendar;  import java.util.Date;  import java.util.GregorianCalendar;  import java.util.Timer;  import java.util.TimerTask;    import javax.swing.Action;  import javax.swing.JButton;  import javax.swing.JDialog;  import javax.swing.JFrame;  import javax.swing.JLabel;  import javax.swing.JOptionPane;  import javax.swing.JPanel;  import javax.swing.JSpinner;  import javax.swing.SpinnerNumberModel;  import javax.swing.SwingConstants;  import javax.swing.SwingUtilities;  import javax.swing.border.LineBorder;  import javax.swing.event.ChangeEvent;  import javax.swing.event.ChangeListener;    /**   *   * Allen 收集网上靠谱的例子,修改后的Swing日期   * 时间选择器,因为修改时间匆忙,希望有时间的朋友继续改进。   * 例子原作者:zjw   * 修改/完善:Allen ---swing时间组件完善时间2013.06.20     */  public class DataChooser extends JButton {        private DateChooser dateChooser = null;      private String preLabel = "";      private String originalText = null;      private SimpleDateFormat sdf = null;      public static boolean tFlag = true;      public static Timer accetimer;      public static String datatimerName = "";         private   long t_start =0;       private  long t_end =0;       private  long ss =0;             public static int currAccYear = 0;      public static int currAccMont = 0;      public static int currAccDay = 0;            public DataChooser() {          this(getNowDate());          //this.datatimerName = datatimerName;      }        public DataChooser(String dateString) {          this();          setText(getDefaultDateFormat(), dateString);          //保存原始是日期时间          initOriginalText(dateString);      }        public DataChooser(SimpleDateFormat df, String dateString) {          this();          setText(df, dateString);            //记忆当前的日期格式化器          this.sdf = df;            //记忆原始日期时间          Date originalDate = null;          try {              originalDate = df.parse(dateString);          } catch (ParseException ex) {              originalDate = getNowDate();          }          initOriginalText(originalDate);      }        public DataChooser(Date date) {          this("", date);          //记忆原始日期时间          initOriginalText(date);      }        public DataChooser(String preLabel, Date date) {          if (preLabel != null) {              this.preLabel = preLabel;          }          setDate(date);          //记忆原始是日期时间          initOriginalText(date);            //setBorder(null);          setCursor(new Cursor(Cursor.HAND_CURSOR));          super.addActionListener(new ActionListener() {                @Override              public void actionPerformed(ActionEvent e) {                  if (dateChooser == null) {                      dateChooser = new DateChooser();                      tFlag = false;                  }                  Point p = getLocationOnScreen();                  p.y = p.y + 30;                  dateChooser.showDateChooser(p);              }          });      }        private static Date getNowDate() {          return Calendar.getInstance().getTime();      }        private static SimpleDateFormat getDefaultDateFormat() {          return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");      }        /**       * 得到当前使用的日期格式化器       * @return 日期格式化器       */      public SimpleDateFormat getCurrentSimpleDateFormat(){          if(this.sdf != null){              return sdf;          }else{              return getDefaultDateFormat();          }      }          //保存原始是日期时间      private void initOriginalText(String dateString) {          this.originalText = dateString;      }        //保存原始是日期时间      private void initOriginalText(Date date) {          this.originalText = preLabel + getDefaultDateFormat().format(date);                          }        /**        * 得到当前记忆的原始日期时间       * @return 当前记忆的原始日期时间(未修改前的日期时间)       */      public String getOriginalText() {          return originalText;      }        // 覆盖父类的方法      @Override      public void setText(String s) {          Date date;          try {              date = getDefaultDateFormat().parse(s);          } catch (ParseException e) {              date = getNowDate();          }          setDate(date);      }        public void setText(SimpleDateFormat df, String s) {          Date date;          try {              date = df.parse(s);          } catch (ParseException e) {              date = getNowDate();          }          setDate(date);      }        public void setDate(Date date) {       if(tFlag){                 super.setText("时间组件");       }else{                super.setText(preLabel + getDefaultDateFormat().format(date));       }                }        public Date getDate() {          String dateString = getText().substring(preLabel.length());          try {              SimpleDateFormat currentSdf = getCurrentSimpleDateFormat();              return currentSdf.parse(dateString);          } catch (ParseException e) {              return getNowDate();          }      }        /**         * 覆盖父类的方法使之无效       * @param listener 响应监听器       */      @Override      public void addActionListener(ActionListener listener) {      }        /**       * 内部类,主要是定义一个JPanel,然后把日历相关的所有内容填入本JPanel,       * 然后再创建一个JDialog,把本内部类定义的JPanel放入JDialog的内容区       */      private class DateChooser extends JPanel implements ActionListener, ChangeListener {            int startYear = 1980; // 默认【最小】显示年份          int lastYear = 2050; // 默认【最大】显示年份          int width = 390; // 界面宽度          int height = 210; // 界面高度          Color backGroundColor = Color.gray; // 底色          // 月历表格配色----------------//          Color palletTableColor = Color.white; // 日历表底色          Color todayBackColor = Color.GREEN; // 今天背景色          Color weekFontColor = Color.blue; // 星期文字色          Color dateFontColor = Color.black; // 日期文字色          Color weekendFontColor = Color.red; // 周末文字色          // 控制条配色------------------//          Color controlLineColor = Color.pink; // 控制条底色          Color controlTextColor = Color.white; // 控制条标签文字色          Color rbFontColor = Color.white; // RoundBox文字色          Color rbBorderColor = Color.red; // RoundBox边框色          Color rbButtonColor = Color.pink; // RoundBox按钮色          Color rbBtFontColor = Color.red; // RoundBox按钮文字色          /** 点击DateChooserButton时弹出的对话框,日历内容在这个对话框内 */          JDialog dialog;          JSpinner yearSpin;          JSpinner monthSpin;          JSpinner daySpin;          JSpinner hourSpin;          JSpinner minuteSpin;          JSpinner secondSpin;          JButton[][] daysButton = new JButton[6][7];            DateChooser() {                setLayout(new BorderLayout());              setBorder(new LineBorder(backGroundColor, 2));              setBackground(backGroundColor);                JPanel topYearAndMonth = createYearAndMonthPanal();              add(topYearAndMonth, BorderLayout.NORTH);              JPanel centerWeekAndDay = createWeekAndDayPanal();              add(centerWeekAndDay, BorderLayout.CENTER);              JPanel buttonBarPanel = createButtonBarPanel();              this.add(buttonBarPanel, java.awt.BorderLayout.SOUTH);          }            private JPanel createYearAndMonthPanal() {              Calendar c = getCalendar();              int currentYear = c.get(Calendar.YEAR);              int currentMonth = c.get(Calendar.MONTH) + 1;              int currentDay = c.get(Calendar.DATE );              int currentHour = c.get(Calendar.HOUR_OF_DAY);              int currentMinute = c.get(Calendar.MINUTE);              int currentSecond = c.get(Calendar.SECOND);                currAccYear = currentYear;              currAccMont = currentMonth;              currAccDay = currentDay;                            JPanel result = new JPanel();              result.setLayout(new FlowLayout());              result.setBackground(controlLineColor);                yearSpin = new JSpinner(new SpinnerNumberModel(currentYear, startYear, lastYear, 1));              yearSpin.setPreferredSize(new Dimension(48, 20));              yearSpin.setName("Year");              yearSpin.setEditor(new JSpinner.NumberEditor(yearSpin, "####"));              yearSpin.addChangeListener(this);              result.add(yearSpin);                JLabel yearLabel = new JLabel("年");              yearLabel.setForeground(controlTextColor);              result.add(yearLabel);                monthSpin = new JSpinner(new SpinnerNumberModel(currentMonth, 1, 12, 1));              monthSpin.setPreferredSize(new Dimension(35, 20));              monthSpin.setName("Month");              monthSpin.addChangeListener(this);              result.add(monthSpin);                JLabel monthLabel = new JLabel("月");              monthLabel.setForeground(controlTextColor);              result.add(monthLabel);                            String dataYMD = "";              if(currentMonth<10){                                if(currentDay<10){                 dataYMD = currentYear+"-0"+currentMonth+"-0"+currentDay;                }                else{                                  dataYMD = currentYear+"-0"+currentMonth+"-"+currentDay;                }                                            }else{                               if(currentDay<10){                 dataYMD = currentYear+"-"+currentMonth+"-0"+currentDay;                }                else{                                  dataYMD = currentYear+"-"+currentMonth+"-"+currentDay;                }              }              String lastDay = getEndDateOfMonth(dataYMD);              lastDay = lastDay.substring(8, lastDay.length());                                  daySpin = new JSpinner(new SpinnerNumberModel(currentDay, 1,Integer.parseInt(lastDay), 1));              daySpin.setPreferredSize(new Dimension(35, 20));              daySpin.setName("Day");              daySpin.addChangeListener(this);             // daySpin.setEnabled(false);            //  daySpin.setToolTipText("请下下面的日历面板中进行选择哪一天!");              daySpin.addChangeListener(this);              result.add(daySpin);                            JLabel dayLabel = new JLabel("日");              dayLabel.setForeground(controlTextColor);              result.add(dayLabel);                hourSpin = new JSpinner(new SpinnerNumberModel(currentHour, 0, 23, 1));              hourSpin.setPreferredSize(new Dimension(35, 20));              hourSpin.setName("Hour");              hourSpin.addChangeListener(this);              result.add(hourSpin);                JLabel hourLabel = new JLabel("时");              hourLabel.setForeground(controlTextColor);              result.add(hourLabel);                minuteSpin = new JSpinner(new SpinnerNumberModel(currentMinute, 0, 59, 1));              minuteSpin.setPreferredSize(new Dimension(35, 20));              minuteSpin.setName("Minute");              minuteSpin.addChangeListener(this);              result.add(minuteSpin);                JLabel minuteLabel = new JLabel("分");              hourLabel.setForeground(controlTextColor);              result.add(minuteLabel);                secondSpin = new JSpinner(new SpinnerNumberModel(currentSecond, 0, 59, 1));              secondSpin.setPreferredSize(new Dimension(35, 20));              secondSpin.setName("Second");              secondSpin.addChangeListener(this);              result.add(secondSpin);                JLabel secondLabel = new JLabel("秒");              hourLabel.setForeground(controlTextColor);              result.add(secondLabel);                return result;          }            private JPanel createWeekAndDayPanal() {              String colname[] = {"日", "一", "二", "三", "四", "五", "六"};              JPanel result = new JPanel();              // 设置固定字体,以免调用环境改变影响界面美观              result.setFont(new Font("宋体", Font.PLAIN, 12));              result.setLayout(new GridLayout(7, 7));              result.setBackground(Color.white);              JLabel cell;                for (int i = 0; i < 7; i++) {                  cell = new JLabel(colname[i]);                  cell.setHorizontalAlignment(JLabel.RIGHT);                  if (i == 0 || i == 6) {                      cell.setForeground(weekendFontColor);                  } else {                      cell.setForeground(weekFontColor);                  }                  result.add(cell);              }                int actionCommandId = 0;              for (int i = 0; i < 6; i++) {                  for (int j = 0; j < 7; j++) {                      JButton numberButton = new JButton();                      numberButton.setBorder(null);                      numberButton.setHorizontalAlignment(SwingConstants.RIGHT);                      numberButton.setActionCommand(String.valueOf(actionCommandId));                      numberButton.addActionListener(this);                      numberButton.setBackground(palletTableColor);                      numberButton.setForeground(dateFontColor);                      if (j == 0 || j == 6) {                          numberButton.setForeground(weekendFontColor);                      } else {                          numberButton.setForeground(dateFontColor);                      }                      daysButton[i][j] = numberButton;                      result.add(numberButton);                      actionCommandId++;                  }              }                return result;          }            /** 得到DateChooserButton的当前text,本方法是为按钮事件匿名类准备的。 */          public String getTextOfDateChooserButton() {              return getText();          }            /** 恢复DateChooserButton的原始日期时间text,本方法是为按钮事件匿名类准备的。 */          public void restoreTheOriginalDate() {           tFlag = true;              String originalText = getOriginalText();              setText(originalText);          }            private JPanel createButtonBarPanel() {              JPanel panel = new JPanel();              panel.setLayout(new java.awt.GridLayout(1, 2));                JButton ok = new JButton("确定");              ok.addActionListener(new ActionListener() {                    @Override                  public void actionPerformed(ActionEvent e) {                      //记忆原始日期时间                      initOriginalText(getTextOfDateChooserButton());                      //隐藏日历对话框                      String seleTime = getTextOfDateChooserButton();                      Date currentTime = new Date();                      SimpleDateFormat sdfor = new   SimpleDateFormat("yyyy-MM-dd HH:mm:ss");                      String dateString = sdfor.format(currentTime);                      Date dsele = null;                      boolean flag =false;       try {          if(seleTime.equals("时间组件")){          JOptionPane.showMessageDialog(null,"你设置的时间已经过期!");          return;                 }                             else{         dsele = sdfor.parse(seleTime);         Date dcurr = sdfor.parse(dateString);                        flag = dsele.before(dcurr);                        if(flag){                         JOptionPane.showMessageDialog(null,"你设置的时间已经过期!");         return;         }         long   startT=sdfor.parse(dateString).getTime();                       long   endT=sdfor.parse(seleTime).getTime();                                           doTimer(startT,endT);         dialog.setVisible(false);       }              } catch (ParseException e1) {        // TODO Auto-generated catch block        e1.printStackTrace();       }                                                     }              });              panel.add(ok);                JButton cancel = new JButton("取消");              cancel.addActionListener(new ActionListener() {                    @Override                  public void actionPerformed(ActionEvent e) {                      //恢复原始的日期时间                      restoreTheOriginalDate();                      //隐藏日历对话框                      dialog.setVisible(false);                  }              });                panel.add(cancel);              return panel;          }                    private JDialog createDialog(Frame owner) {              JDialog result = new JDialog(owner, "日期时间选择", true);              result.setDefaultCloseOperation(JDialog.HIDE_ON_CLOSE);              result.getContentPane().add(this, BorderLayout.CENTER);              result.pack();              result.setSize(width, height);              return result;          }            void showDateChooser(Point position) {              Frame owner = (Frame) SwingUtilities.getWindowAncestor(DataChooser.this);              if (dialog == null || dialog.getOwner() != owner) {                  dialog = createDialog(owner);              }              dialog.setLocation(getAppropriateLocation(owner, position));              flushWeekAndDay();              dialog.setVisible(true);          }            Point getAppropriateLocation(Frame owner, Point position) {              Point result = new Point(position);              Point p = owner.getLocation();              int offsetX = (position.x + width) - (p.x + owner.getWidth());              int offsetY = (position.y + height) - (p.y + owner.getHeight());                if (offsetX > 0) {                  result.x -= offsetX;              }                if (offsetY > 0) {                  result.y -= offsetY;              }                return result;          }            private Calendar getCalendar() {              Calendar result = Calendar.getInstance();              result.setTime(getDate());              return result;          }            private int getSelectedYear() {              return ((Integer) yearSpin.getValue()).intValue();          }            private int getSelectedMonth() {              return ((Integer) monthSpin.getValue()).intValue();          }          private int getSelectedDay() {              return ((Integer) daySpin.getValue()).intValue();          }            private int getSelectedHour() {              return ((Integer) hourSpin.getValue()).intValue();          }            private int getSelectedMinite() {              return ((Integer) minuteSpin.getValue()).intValue();          }            private int getSelectedSecond() {              return ((Integer) secondSpin.getValue()).intValue();          }            private void dayColorUpdate(boolean isOldDay) {              Calendar c = getCalendar();              int day = c.get(Calendar.DAY_OF_MONTH);              c.set(Calendar.DAY_OF_MONTH, 1);              int actionCommandId = day - 2 + c.get(Calendar.DAY_OF_WEEK);              int i = actionCommandId / 7;              int j = actionCommandId % 7;              if (isOldDay) {                  daysButton[i][j].setForeground(dateFontColor);              } else {                  daysButton[i][j].setForeground(todayBackColor);              }          }            private void flushWeekAndDay() {              Calendar c = getCalendar();              c.set(Calendar.DAY_OF_MONTH, 1);              int maxDayNo = c.getActualMaximum(Calendar.DAY_OF_MONTH);              int dayNo = 2 - c.get(Calendar.DAY_OF_WEEK);              for (int i = 0; i < 6; i++) {                  for (int j = 0; j < 7; j++) {                      String s = "";                      if (dayNo >= 1 && dayNo <= maxDayNo) {                          s = String.valueOf(dayNo);                      }                      daysButton[i][j].setText(s);                      dayNo++;                  }              }              dayColorUpdate(false);          }            /**           * 选择日期时的响应事件           */          @Override          public void stateChanged(ChangeEvent e) {                         Calendar cc = Calendar.getInstance();              JSpinner source = (JSpinner) e.getSource();              Calendar c = getCalendar();              if (source.getName().equals("Hour")) {                  c.set(Calendar.HOUR_OF_DAY, getSelectedHour());                  setDate(c.getTime());                  return;              }              if (source.getName().equals("Minute")) {                  c.set(Calendar.MINUTE, getSelectedMinite());                  setDate(c.getTime());                  return;              }              if (source.getName().equals("Second")) {                  c.set(Calendar.SECOND, getSelectedSecond());                  setDate(c.getTime());                  return;              }              if(e.getSource()==monthSpin){                               currAccYear =getSelectedYear();               currAccMont = getSelectedMonth();               currAccDay= getSelectedDay();               //daySpin = new SpinnerNumberModel(25, 1,20, 1));                String dataYMD = "";                                if(currAccMont<10){                                        if(currAccDay<10){                     dataYMD = currAccYear+"-0"+currAccMont+"-0"+currAccDay;                    }                    else{                                          dataYMD = currAccYear+"-0"+currAccMont+"-"+currAccDay;                    }                                                        }else{                                       if(currAccDay<10){                     dataYMD = currAccYear+"-"+currAccMont+"-0"+currAccDay;                    }                    else{                                          dataYMD = currAccYear+"-"+currAccMont+"-"+currAccDay;                    }                  }                   String lastDay = getEndDateOfMonth(dataYMD);                   lastDay = lastDay.substring(8, lastDay.length());                int currentDay = c.get(Calendar.DATE );                                if(Integer.parseInt(lastDay)==29){                                  if(currAccDay>=29){                  daySpin.setModel(new SpinnerNumberModel(29, 1,Integer.parseInt(lastDay), 1));                 }                 else{                  daySpin.setModel(new SpinnerNumberModel(currAccDay, 1,Integer.parseInt(lastDay), 1));                 }                                 }                else if(Integer.parseInt(lastDay)==28){                                  if(currAccDay>=28){                  daySpin.setModel(new SpinnerNumberModel(28, 1,Integer.parseInt(lastDay), 1));                 }                 else{                  daySpin.setModel(new SpinnerNumberModel(currAccDay, 1,Integer.parseInt(lastDay), 1));                 }                                 }                   else if(Integer.parseInt(lastDay)==30){                                     if(currAccDay>1){                  daySpin.setModel(new SpinnerNumberModel(currAccDay-1, 1,Integer.parseInt(lastDay), 1));                 }                 else{                     daySpin.setModel(new SpinnerNumberModel(currAccDay, 1,Integer.parseInt(lastDay), 1));                 }                }                else{                 daySpin.setModel(new SpinnerNumberModel(currAccDay, 1,Integer.parseInt(lastDay), 1));                }                            }                            if(e.getSource()==yearSpin){                              currAccYear =getSelectedYear();               currAccMont = getSelectedMonth();               currAccDay= getSelectedDay();               //daySpin = new SpinnerNumberModel(25, 1,20, 1));                String dataYMD = "";                                if(currAccMont<10){                                        if(currAccDay<10){                     dataYMD = currAccYear+"-0"+currAccMont+"-0"+currAccDay;                    }                    else{                                          dataYMD = currAccYear+"-0"+currAccMont+"-"+currAccDay;                    }                                                        }else{                                       if(currAccDay<10){                     dataYMD = currAccYear+"-"+currAccMont+"-0"+currAccDay;                    }                    else{                                          dataYMD = currAccYear+"-"+currAccMont+"-"+currAccDay;                    }                  }                   String lastDay = getEndDateOfMonth(dataYMD);                   lastDay = lastDay.substring(8, lastDay.length());                int currentDay = c.get(Calendar.DATE );                   if(Integer.parseInt(lastDay)==29){                                  if(currAccDay>=29){                  daySpin.setModel(new SpinnerNumberModel(29, 1,Integer.parseInt(lastDay), 1));                 }                 else{                  daySpin.setModel(new SpinnerNumberModel(currAccDay, 1,Integer.parseInt(lastDay), 1));                 }                                 }                else if(Integer.parseInt(lastDay)==28){                                  if(currAccDay>=28){                  daySpin.setModel(new SpinnerNumberModel(28, 1,Integer.parseInt(lastDay), 1));                 }                 else{                  daySpin.setModel(new SpinnerNumberModel(currAccDay, 1,Integer.parseInt(lastDay), 1));                 }                                 }                else if(Integer.parseInt(lastDay)==30){                 if(currAccDay>1){                  daySpin.setModel(new SpinnerNumberModel(currAccDay-1, 1,Integer.parseInt(lastDay), 1));                 }                 else{                     daySpin.setModel(new SpinnerNumberModel(currAccDay, 1,Integer.parseInt(lastDay), 1));                 }                }                else{                 daySpin.setModel(new SpinnerNumberModel(currAccDay, 1,Integer.parseInt(lastDay), 1));                }                                               }                                                        dayColorUpdate(true);                if (source.getName().equals("Year")) {                  c.set(Calendar.YEAR, getSelectedYear());              }               else if (source.getName().equals("Month")) {                  c.set(Calendar.MONTH, getSelectedMonth() - 1);              }              else if (source.getName().equals("Day")) {                  c.set(Calendar.DATE,getSelectedDay() );              }                setDate(c.getTime());              flushWeekAndDay();                        }            /**           * 选择日期时的响应事件           */          @Override          public void actionPerformed(ActionEvent e) {              JButton source = (JButton) e.getSource();              if (source.getText().length() == 0) {                  return;              }              dayColorUpdate(true);              source.setForeground(todayBackColor);              int newDay = Integer.parseInt(source.getText());              Calendar c = getCalendar();              c.set(Calendar.DAY_OF_MONTH, newDay);              setDate(c.getTime());              //把daySpin中的值也变了              daySpin.setValue(Integer.valueOf(newDay));             }      }       public void doTimer(long start,long end){         t_start =start;       t_end =end;       ss=(end-start)/(1000);      if (accetimer != null) {       accetimer.cancel();       accetimer = new Timer();    } else {     accetimer = new Timer();    }    //   AccessTabPanel.acceTimeFlag=true;    long frequency = 1000;    accetimer.schedule(new TimerTask() {     @Override     public void run() {             try {        showTime();       } catch (Exception ex) {                ex.printStackTrace();       }           }      }, frequency, frequency);               }          public void showTime(){      //共计秒数      int MM = (int)ss/60; //共计分钟数      int hh=(int)ss/3600; //共计小时数      int dd=(int)hh/24; //共计天数             int s_dd = (int) (ss/(60*60*24));//天        int s_hh = (int) ((ss- s_dd*(60*60*24)))/3600;        int s_mm = (int) ((ss- (s_dd*(60*60*24)+ s_hh*3600))/60);        int s_ss = (int) (ss - (s_dd*(60*60*24)+ s_hh*3600 +s_mm*60));                String timeLabel = "距离程序开始运行时间: "+s_dd+" 天"+s_hh+" 小时 "+s_mm+" 分钟"+s_ss+" 秒 ";      //  AccessTabPanel.timeAccLabel.setText(timeLabel);                ss--;        if(ss<0){                  accetimer.cancel();      //   AccessTabPanel.startProceeAcceEtl();                           }   }           /**    * 获取一个月的最后一天    *     * @param dat    * @return    */    public static String getEndDateOfMonth(String dat) {// yyyy-MM-dd    String str = dat.substring(0, 8);    String month = dat.substring(5, 7);    int mon = Integer.parseInt(month);    if (mon == 1 || mon == 3 || mon == 5 || mon == 7 || mon == 8      || mon == 10 || mon == 12) {     str += "31";    } else if (mon == 4 || mon == 6 || mon == 9 || mon == 11) {     str += "30";    } else {     if (isLeapYear(dat)) {      str += "29";     } else {      str += "28";     }    }    return str;   }      /**    * 判断是否润年    *     * @param ddate    * @return    */   public static boolean isLeapYear(String ddate) {      /**     * 详细设计: 1.被400整除是闰年,否则: 2.不能被4整除则不是闰年 3.能被4整除同时不能被100整除则是闰年     * 3.能被4整除同时能被100整除则不是闰年     */    Date d = strToDate(ddate);    GregorianCalendar gc = (GregorianCalendar) Calendar.getInstance();    gc.setTime(d);    int year = gc.get(Calendar.YEAR);    if ((year % 400) == 0)     return true;    else if ((year % 4) == 0) {     if ((year % 100) == 0)      return false;     else      return true;    } else     return false;   }   /**    * 将短时间格式字符串转换为时间 yyyy-MM-dd    *     * @param strDate    * @return    */   public static Date strToDate(String strDate) {    SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");    ParsePosition pos = new ParsePosition(0);    Date strtodate = formatter.parse(strDate, pos);    return strtodate;   }          }