添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
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);

}

}

}

—————————————————————————————————— 傲轩游戏网