http://hi.baidu.com/captives/item/25c8b80170a9b0ccf45ba6f8

————————————————————————————————————————————————————————

    package dtm.tools;  

      

    import java.io.BufferedInputStream;  

    import java.io.BufferedReader;  

    import java.io.IOException;  

    import java.io.InputStream;  

    import java.io.InputStreamReader;  

    import java.net.Socket;  

    import java.net.UnknownHostException;  

    import java.util.Calendar;  

    import java.util.Date;  

    import java.util.TimeZone;  

    import java.util.logging.Level;  

    import java.util.logging.Logger;  

      

    /** 

     * SyncTime 获取原子钟的时间,并设置为系统时间 

     * @author Administrator 

     */  

    public class SyncTime {  

      

        private static int sleepMinutes = 0;  

        private static final long EPOCH_OFFSET_MILLIS;  

        private static final String[] hostName = {"time-a.nist.gov", "time-nw.nist.gov", "time.nist.gov"};  

      

      

        static {  

            Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("GMT"));  

            // Java使用的参照标准是1970年,而时间服务器返回的秒是相当1900年的,算一下偏移   

            calendar.set(1900, Calendar.JANUARY, 1, 0, 0, 0);  

            EPOCH_OFFSET_MILLIS = Math.abs(calendar.getTime().getTime());  

        }  

      

        public static void main(String[] args) {  

            GetWebTime();  

        }  

      

        private static Date getNetDate(String hostName) {  

            Date date = null;  

            long result = 0;  

            try {  

                Socket socket = new Socket(hostName, 37);  

                BufferedInputStream bis = new BufferedInputStream(socket.getInputStream(),  

                        socket.getReceiveBufferSize());  

                int b1 = bis.read();  

                int b2 = bis.read();  

                int b3 = bis.read();  

                int b4 = bis.read();  

                if ((b1 | b2 | b3 | b3) < 0) {  

                    return null;  

                }  

                result = (((long) b1) << 24) + (b2 << 16) + (b3 << 8) + b4;  

                date = new Date(result * 1000 - EPOCH_OFFSET_MILLIS);  

                socket.close();  

            } catch (UnknownHostException ex) {  

                Logger.getLogger(SyncTime.class.getName()).log(Level.SEVERE, null, ex);  

            } catch (IOException ex) {  

                Logger.getLogger(SyncTime.class.getName()).log(Level.SEVERE, null, ex);  

            }  

            return date;  

        }  

      

        /** 

         * 通过ping命令判断是否离线 

         * @return 

         */  

        public static boolean offLine() {  

            Runtime run = Runtime.getRuntime();  

            try {  

                Process process = run.exec("ping www.hao123.com");  

                InputStream s = process.getInputStream();  

                BufferedReader bis = new BufferedReader(new InputStreamReader(s));  

                String str = bis.readLine();  

                while (str != null) {  

                    if (str.startsWith("Reply from")) {  

                        return false;  

                    }  

                    str = bis.readLine();  

                }  

                process.waitFor();  

            } catch (IOException ex) {  

                Logger.getLogger(SyncTime.class.getName()).log(Level.SEVERE, null, ex);  

            } catch (InterruptedException ex) {  

                Logger.getLogger(SyncTime.class.getName()).log(Level.SEVERE, null, ex);  

            }  

            return true;  

        }  

      

        /** 

         * 通过调用本地命令date和time修改计算机时间 

         * @param date 

         */  

        private static void setComputeDate(Date date) {  

            Calendar c = Calendar.getInstance(TimeZone.getTimeZone("GMT+8"));  

            c.setTime(date);  

            int year = c.get(Calendar.YEAR);  

            int month = c.get(Calendar.MONTH) + 1;  

            int day = c.get(Calendar.DAY_OF_MONTH);  

            int hour = c.get(Calendar.HOUR_OF_DAY);  

            int minute = c.get(Calendar.MINUTE);  

            int second = c.get(Calendar.SECOND);  

      

            c.setTime(new Date());  

            int year_c = c.get(Calendar.YEAR);  

            int month_c = c.get(Calendar.MONTH) + 1;  

            int day_c = c.get(Calendar.DAY_OF_MONTH);  

            int hour_c = c.get(Calendar.HOUR_OF_DAY);  

            int minute_c = c.get(Calendar.MINUTE);  

      

            String ymd = year + "-" + month + "-" + day;  

            String time = hour + ":" + minute + ":" + second;  

            try {  

                // 日期不一致就修改一下日期   

                if (year != year_c || month != month_c || day != day_c) {  

                    String cmd = "cmd /c date " + ymd;  

                    Process process = Runtime.getRuntime().exec(cmd);  

                    process.waitFor();  

                }  

      

                // 时间不一致就修改一下时间   

                if (hour != hour_c || minute != minute_c) {  

                    String cmd = "cmd  /c  time " + time;  

                    Process process = Runtime.getRuntime().exec(cmd);  

                    process.waitFor();  

                }  

            } catch (IOException ex) {  

                Logger.getLogger(SyncTime.class.getName()).log(Level.SEVERE, null, ex);  

            } catch (InterruptedException ex) {  

                Logger.getLogger(SyncTime.class.getName()).log(Level.SEVERE, null, ex);  

            }  

        }  

          

        public static void GetWebTime()  

        {  

            // 检测电脑是否在线   

            while (offLine() && sleepMinutes < 30) {  

                try {  

                    Thread.sleep(120000);  

                    sleepMinutes += 2;  

                } catch (InterruptedException ex) {  

                    Logger.getLogger(SyncTime.class.getName()).log(Level.SEVERE, null, ex);  

                }  

            }  

      

            // 30分钟还没有联线,表示就不上网了,退出吧   

            if (sleepMinutes >= 30)  

            {  

                System.exit(0);  

            }  

      

            // 从网络上获取时间   

            Date date = null;  

            for (int i = 0; i < hostName.length; i++) {  

                date = getNetDate(hostName[i]);  

                if (date != null) {  

                    break;  

                }  

            }  

      

            // 修改本机时间   

            if (date != null) {  

                System.out.println("原子钟时间:"+date);  

                setComputeDate(date);  

            }  

        }  

    } 

java 获取服务器时间同步本地计算机时间的更多相关文章

  1. java获取服务器路径

    java获取服务器一些信息的方法(服务器地址/相对路径/端口/项目名字 request.getServletContext().getRealPath("/")  获取项目所在服务 ...

  2. java获取本月开始时间和结束时间、上个月第一天和最后一天的时间以及当前日期往前推一周、一个月

    import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.uti ...

  3. Java获取当前的日期和时间

    Java获取当前的日期和时间 1.具体实现方法如下 /** * @Title:DateTime.java * @Package:com.you.model * @Description:获取当前的日期 ...

  4. java获取服务器IP地址及MAC地址的方法

    这篇文章主要介绍了java编程实现获取机器IP地址及MAC地址的方法,实例分析了Java分别针对单网卡及多网卡的情况下获取服务器IP地址与MAC地址的相关技巧,需要的朋友可以参考下   本文实例讲述了 ...

  5. java获取服务器基本信息

    实现步骤: (1)创建servlet BrowserServer (2)调用HttpServletRequest对象的getServerName()方法获取服务器名称 (3)调用HttpServlet ...

  6. java获取服务器的ip和地址

    HttpServletRequest httpRequest=(HttpServletRequest)request; String strBackUrl = "http://" ...

  7. java获取服务器一些信息的方法

    request.getServletContext().getRealPath("/") 获取项目所在服务器的全路径,如:D:\Program Files\apache-tomca ...

  8. java 获取的是本地的IP地址

    1 public static void main(String[] args) { 2 try { 3 InetAddress address = InetAddress.getLocalHost( ...

  9. JAVA获取服务器路径的方法

    1.在JSF环境中获取到ServletContext: 1 2 ServletContext sc = (ServletContext)FacesContext.         getCurrent ...

随机推荐

  1. threadlocal 变量 跟synchronized 关键字的关系

    为什么叫threadloca变量呢,经过大量的查资料发现threadlocal并不是之前理解的控制线程用的东西,它其实也属于一类变量,只不过是线程的局部变量,它的作用就是实现线程间对该变量的唯一线程调 ...

  2. 1069: [SCOI2007]最大土地面积|旋转卡壳

    旋转卡壳就是先求出凸包.然后在凸包上枚举四边形的对角线两側分别找面积最大的三角形 因为在两側找面积最大的三角形的顶点是单调的所以复杂度就是n2 单调的这个性质能够自行绘图感受一下,似乎比較显然 #in ...

  3. 微信公众号支付调用chooseWXPay提示“errmsg choosewxpay fail”

    微信公众号支付一直提示“errmsg choosewxpay fail”,也没有提示具体错误信息,签名没有问题(签名验证地址:https://pay.weixin.qq.com/wiki/doc/ap ...

  4. 聊聊iOS中网络编程长连接的那些事

    1.长连接在iOS开发中的应用 常见的短连接应用场景:一般的App的网络请求都是基于Http1.0进行的,使用的是NSURLConnection.NSURLSession或者是AFNetworking ...

  5. IBM-ETP 实训项目前一天

    明天就要开始项目了,实训项目,虽然之前做了几个项目,但是明天就要被一个有着8年项目经验的大牛带着做这个项目了.心中还是不免有点兴奋的.希望能学到更多的东西,来充实自己. 自己也搭建了一个小的demo ...

  6. jshint错误

    这条命令即可. npm install --save-dev jshint gulp-jshint

  7. 让Vs2013 完美支持EF6.1 Code First with Oracle 2015年12月24日更新

    本文是对下文的补充,切勿以为我是全盘复制哦 连接: http://www.cnblogs.com/wlflovenet/p/4187455.html Normal 0 7.8 磅 0 2 false ...

  8. RTTI机制与作用(转)

    一.RTTI(Run-Time Type identification),通过运行时类型信息,程序能够使用基类的指针或引用来检查这些指针或引用所指向的对象的实际派生类型.面向对象的编程语言,想C++, ...

  9. Unity Inspector 给组件自动关联引用(二)

    通过声明的变量名称,主动关联引用. 使用这个关联引用两种方式1.  给你组件继承  MonoAutoQuote 点击组件inspector 按钮执行2.  给你组件类添加[AAutoQuote] 特性 ...

  10. HTML-HTML5+CSS3权威指南阅读(一、HTML5与HTML4之间的区别)

    一.HTML5与HTML4之间的区别 1. DOCTYPE 声明 1). HTML4 中为 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 T ...