java 获取服务器时间同步本地计算机时间
————————————————————————————————————————————————————————
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 获取服务器时间同步本地计算机时间的更多相关文章
- java获取服务器路径
java获取服务器一些信息的方法(服务器地址/相对路径/端口/项目名字 request.getServletContext().getRealPath("/") 获取项目所在服务 ...
- java获取本月开始时间和结束时间、上个月第一天和最后一天的时间以及当前日期往前推一周、一个月
import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.uti ...
- Java获取当前的日期和时间
Java获取当前的日期和时间 1.具体实现方法如下 /** * @Title:DateTime.java * @Package:com.you.model * @Description:获取当前的日期 ...
- java获取服务器IP地址及MAC地址的方法
这篇文章主要介绍了java编程实现获取机器IP地址及MAC地址的方法,实例分析了Java分别针对单网卡及多网卡的情况下获取服务器IP地址与MAC地址的相关技巧,需要的朋友可以参考下 本文实例讲述了 ...
- java获取服务器基本信息
实现步骤: (1)创建servlet BrowserServer (2)调用HttpServletRequest对象的getServerName()方法获取服务器名称 (3)调用HttpServlet ...
- java获取服务器的ip和地址
HttpServletRequest httpRequest=(HttpServletRequest)request; String strBackUrl = "http://" ...
- java获取服务器一些信息的方法
request.getServletContext().getRealPath("/") 获取项目所在服务器的全路径,如:D:\Program Files\apache-tomca ...
- java 获取的是本地的IP地址
1 public static void main(String[] args) { 2 try { 3 InetAddress address = InetAddress.getLocalHost( ...
- JAVA获取服务器路径的方法
1.在JSF环境中获取到ServletContext: 1 2 ServletContext sc = (ServletContext)FacesContext. getCurrent ...
随机推荐
- [Angular] Extract Implementation Details of ngrx from an Angular Application with the Facade Pattern
Extracting away the implementation details of ngrx from your components using the facade pattern cre ...
- Android TabHost控件 右侧留空并增加按钮
涉及公司内部程序,部分地方进行模糊处理. 公司Android程序的一个子程序UI要进行改版,最初的UI添加按钮是在内容区,而且TabHost空间是正常的标题平均分布.如下图(其实这是改版的第一版,没有 ...
- js math 对数和指数处理 expm1 log1p
1.Math.expm1() Math.expm1(x)返回 ex - 1,即Math.exp(x) - 1. Math.expm1(-1) // -0.6321205588285577 Math.e ...
- Visual studio之C# 重新定义Messbox的显示窗口位置
背景 当前做的APP需要新建一个设置窗口,该设置窗口会出现在靠近屏幕边缘位置,但主窗口铺满屏幕,设置窗口会弹出一些讯息,但默认情况下Messagebox窗口会居中于主窗口,这不太符合要求,正常应该居中 ...
- LR11.50 通过Mobile Application 录制手机操作
LR11.50 通过Mobile Application 录制手机操作 步骤就是 1:新建LR脚本.协议选择Mobile Application - HTTP/HTML 2:在record里选择第三个 ...
- 可拖拽的3D盒子
代码地址如下:http://www.demodashi.com/demo/11453.html 一直想做一个立体的盒子,前段时间刚好看见掘金上有位朋友发了篇关于3d盒子的文章,看了决定自己做一下, ...
- HTML-HTML5+CSS3权威指南阅读(三、CSS3)
不同的浏览器(包括-moz-代表的Mozilla Firefox, -ms-代表的Microsoft Internet Explorer等)厂商在发布正式版本之前之前, 试验各自对CSS3新特性的实现 ...
- php处理行业分类数据
实现步骤: 1.将excel表格存储为后缀名为 .csv格式的文件: 2.将.csv格式文件导入到mysql数据库中: 3.通过条件查询将所需要的数据查出并导入另一个数据表中: 下面是一些php片段: ...
- unity3d控制模型的运动
这里就不多做解释了,直接上代码,只为了备忘. public class HeroMove : MonoBehaviour { private float speed;//人物行动速度 private ...
- Java 继承、多态与类的复用
摘要: 本文结合Java的类的复用对面向对象两大特征继承和多态进行了全面的介绍. 首先,我们介绍了继承的实质和意义,并探讨了继承,组合和代理在类的复用方面的异同.紧接着,我们依据继承引入了多态.介绍了 ...