刚学没事搞了个倒计时的网上看了这个  结果怎么算都多了30天求解
package classic3IOAndThread;
import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
import javax.swing.JFrame;
import javax.swing.JLabel;
//Graduate time from java school: 2010-8-19
public class CountDown {
 long longTime;
 long currentTime;
 long distTime;
 long day, hour, minutes, seconds;
 public CountDown() {
  CDown();
 }
 public void CDown() {
  Timer timer = new Timer();
  JFrame jf = new JFrame();
  final JLabel jl = new JLabel();
  jf.add(jl);
  jf.setVisible(true);
  jf.setSize(400, 150);
  jf.getDefaultCloseOperation();
  timer.schedule(new TimerTask() {
   @Override
   public void run() {
    Calendar cal = Calendar.getInstance();
    cal.set(2010, 7, 19, 18, 0, 0);
    // 返回历元到指定时间的毫秒数。
    longTime = cal.getTimeInMillis();
    // 返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。
    currentTime = new Date().getTime();
    distTime = longTime - currentTime;
    day = ((distTime / 1000) / (3600 * 24));
    hour = ((distTime / 1000) - day * 86400) / 3600;
    minutes = ((distTime / 1000) - day * 86400 - hour * 3600) / 60;
    seconds = (distTime / 1000) - day * 86400 - hour * 3600
      - minutes * 60;
    jl.setText("  达内SD1003班 毕业倒计时" + day + " 天 " + hour + "小时 :" + minutes
      + "分钟 :" + seconds + "秒");
   }
  }, 0, 1000);
 }
 public static void main(String[] args) {
  new CountDown();
 }
}
运行结果: 达内SD1003班 毕业倒计时 102天 20小时:10分钟:10秒。
提示:显示结果每秒自动刷性。

解决方案 »

  1.   

    import java.awt.BorderLayout;
    import java.util.Calendar;
    import java.util.GregorianCalendar;import javax.swing.JFrame;
    import javax.swing.JLabel;
    public class TimeFrame {
        private JFrame jf;
        private JLabel label1;
        private JLabel label2;
        public TimeFrame(){
         jf=new JFrame("倒计时牌");
         label1=new JLabel("距2012世界末日还有:");
         label2=new JLabel("");
         jf.add(label1,BorderLayout.NORTH);
         jf.add(label2,BorderLayout.CENTER);
         Thread t=new RefreshTimeThread(new GregorianCalendar(2012,Calendar.DECEMBER,21,0,0,0));
         t.start();
        }
        public void showMe(){
         jf.setBounds(200,200,300,150);
         jf.setVisible(true);
         jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        }
    public static void main(String[] args) {
     new TimeFrame().showMe();
    }
        class RefreshTimeThread extends Thread{
         private Calendar targetTime;
         public RefreshTimeThread(Calendar targetTime){
         this.targetTime =targetTime;
         }
         public void run(){
         while(true){
         Calendar todayTime=new GregorianCalendar();
         long seconds=(targetTime.getTimeInMillis()-todayTime.getTimeInMillis())/1000;
         if(seconds<=0){
         label2.setText("时间到!");
         break;
         }
         int day=(int)(seconds/(24*60*60));
         int hour=(int)(seconds/(60*60)%24);
         int min=(int)(seconds/60%60);
         int sec=(int)(seconds%60);
         String str=day+"天 "+hour+"时 "+min+"分 "+sec+"秒 ";
         label2.setText(str);
         try{
         Thread.sleep(1000);
         }catch(InterruptedException e){
         e.printStackTrace();
         }
         }
         }
        }
    }
    你可以看下这段代码,或许对你有帮助~~
      

  2.   

      cal.set(2010, 7, 19, 18, 0, 0); // 这是 2010,8,19。 月 0-11,现在应该明白了吧2010已过,改成2012了。
    import java.awt.Font;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.util.Calendar;
    import java.util.Date;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.Timer;
    import static java.util.concurrent.TimeUnit.*;//Graduate time from java school: 2010-8-19
    public class CountDown {
        private CountDown() { }    public static void main(String[] args) {
            java.awt.EventQueue.invokeLater(new java.lang.Runnable(){
                    @Override public void run(){
                        final JFrame frame = new JFrame("毕业倒计时");
                        final JLabel display = new JLabel("");
                        final Font font = display.getFont();
                        display.setFont(font.deriveFont(Font.BOLD, 24.F));
                        display.setVerticalAlignment(JLabel.CENTER);
                        display.setHorizontalAlignment(JLabel.CENTER);
                        frame.add(display);                    frame.setSize(700, 150);
                        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                        final Timer timer = new Timer(1000,new ActionListener() {
                                @Override
                                public void actionPerformed(ActionEvent e) {
                                    Calendar calendar = Calendar.getInstance();
                                    long now = calendar.getTimeInMillis();                                calendar.set(2012, 6, 19, 18, 0, 0);
                                    long longTime = calendar.getTimeInMillis();                                long distTime = longTime - now;
                                    long days = MILLISECONDS.toDays(distTime);
                                    long hours = MILLISECONDS.toHours(distTime - DAYS.toMillis(days));
                                    long minutes = MILLISECONDS.toMinutes(distTime - DAYS.toMillis(days)
                                                                          - HOURS.toMillis(hours));
                                    long seconds = MILLISECONDS.toSeconds(distTime - DAYS.toMillis(days)
                                                                          - HOURS.toMillis(hours)
                                                                          - MINUTES.toMillis(minutes));
                                    display.setText(String.format("达内SD1203班 毕业倒计时 %d 天 %d 小时 %d 分钟 %d 秒",
                                                             days,hours,minutes,seconds));
                                }
                            });
                        timer.start();
                        frame.setVisible(true);
                    }
                });
        }
    }