java 获取服务器时间同步本地计算机时间

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 获取服务器时间同步本地计算机时间,布布扣,bubuko.com

时间: 2024-10-17 20:44:07

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

Java获取服务器环境

package com.rapido.utils; import java.util.Properties; /** * 获取服务器环境信息 * @author X-rapido * */ public class SystemDataUtil { public static Properties getSystemProperties() { Properties props = System.getProperties(); // 系统属性 return props; } public st

java 获取的是本地的IP地址

1 public static void main(String[] args) { 2 try { 3 InetAddress address = InetAddress.getLocalHost();//获取的是本地的IP地址 //PC-20140317PXKX/192.168.0.121 4 String hostAddress = address.getHostAddress());//192.168.0.121 5 InetAddress address1 = InetAddress.

JAVA获取服务器路径的方法

1.在JSF环境中获取到ServletContext: ServletContext sc = (ServletContext)FacesContext. getCurrentInstance().getExternalContext().getContext(); 2.servlet中获得项目绝对路径 String filePath=this.getServletConfig(). getServletContext().getRealPath("/"); 根目录所对应的绝对路径 r

java获取服务器所有信息

package com.sinosoft.outher.listener; import java.net.InetAddress;import java.net.UnknownHostException;import java.util.Map;import java.util.Properties;import org.hyperic.sigar.CpuInfo;import org.hyperic.sigar.CpuPerc;import org.hyperic.sigar.FileSys

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

import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; import org.junit.Test; public class TestDateUtil { //1.获取当月第一天 @Test public void testForDate(){ //规定返回日期格式 SimpleDateFormat sf=ne

Java获取服务器IP和客户端IP

服务器IP: String addr = InetAddress.getLocalHost().getHostAddress(); 说明:很明显上面是没考虑到服务器有多个iP的情况. 客户顿啊IP: /** * 获取IP * * @param request HttpServletRequest * @return IP字符串 */ public static String getRemoteHost(HttpServletRequest request) { String ip = reque

java 获取服务器 linux 服务器IP 信息

public String getUnixLocalIp() { String ip = ""; try { Enumeration<?> e1 = (Enumeration<?>) NetworkInterface.getNetworkInterfaces(); while (e1.hasMoreElements()) { NetworkInterface ni = (NetworkInterface) e1.nextElement(); if (!ni.ge

java获取客户端IP和服务器IP

一.Java获取服务器IP(转自:https://www.cnblogs.com/george93/p/6306579.html) //方法一,也是最简单的一种. String SERVER_IP = InetAddress.getLocalHost().getHostAdress().toString(); //方法二: /** * 获取服务器IP地址 * @return */ @SuppressWarnings("unchecked") public static String g

java获取时间戳的方法

JAVA 获取当前月的初始时间的时间戳 public static long getMonthFirstDay() { Calendar calendar = Calendar.getInstance();// 获取当前日期 calendar.add(Calendar.MONTH, 0); calendar.set(Calendar.DAY_OF_MONTH, 1);// 设置为1号,当前日期既为本月第一天 calendar.set(Calendar.HOUR_OF_DAY, 0); calen