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 ...
随机推荐
- [ES6] 10. Array Comprehensions
ES6 decided that Array Comprehensions will not included in this version, ES7 will include this. Ther ...
- 一条长为L的绳子,一面靠墙,另外三边组成矩形,问此矩形最大面积能是多少?
靠墙的两边设为x,墙的对边设为y,有2x+y=L; 则y=L-2x, 矩形面积函数为xy=x(L-2x)=-2x2+xL,即f(x)=-2x2+xL 这时就是求二次函数的极值问题了. 按二次函数y=a ...
- STL 组件
- Docker学习笔记之一,搭建一个JAVA Tomcat运行环境(转)
前言 Docker旨在提供一种应用程序的自动化部署解决方案,在 Linux 系统上迅速创建一个容器(轻量级虚拟机)并部署和运行应用程序,并通过配置文件可以轻松实现应用程序的自动化安装.部署和升级,非常 ...
- 产品经理PM
首先希望大家记住的就是,千万不要以为产品经理是什么高大上的光环,产品经理其实只是一种状态,一种心态而已. 大家可能看到BAT每年都会从校园里面招聘一些产品经理,尤其是我们腾讯,声称以产品为王,每年投产 ...
- unity3d通过代码动态创建销毁游戏对象
只能动态创建内部提供的游戏对象,代码如下: //按下C后创建 if (Input.GetKeyDown (KeyCode.C)) { GameObject s1 = GameObject.Create ...
- 自定义asp.net mvc Filter 过滤器
1新建一个mvc项目:如图 2.主要创建下面一些类文件 1.utility目录 放置自定义的过滤器 using System; using System.Collections.Generic; us ...
- [Jobdu] 题目1337:寻找最长合法括号序列
题目描述: 给你一个长度为N的,由’(‘和’)’组成的括号序列,你能找出这个序列中最长的合法括号子序列么?合法括号序列的含义便是,在这个序列中,所有的左括号都有唯一的右括号匹配:所有的右括号都有唯一的 ...
- 点滴积累【JS】---JS小功能(onmousemove鼠标移动坐标接龙DIV)
效果: 思路: 利用onmousemove事件,然后获取鼠标的坐标,之后把DIV挨个遍历,最后把鼠标的坐标赋给DIV. 代码: <head runat="server"> ...
- NGUI ScrollView中的Bounds
获取到的Bounds值是固定的,是因为Bounds区域的计算是被动计算,需要主动调用使其刷新 scrollView.InvalidateBounds(); 另外Bounds的Min和Max似乎和NGU ...