您的位置:首页 > 理论基础 > 计算机网络

Java通过Ntp服务器获取网络时间修改本地服务器时间

2013-11-22 10:53 603 查看
需要第三方架包commons-net-1.4.1.jar

private static DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

/**
* @author 2013-11-21 下午05:51:49
* @功能:获取网络最新时间
* @return
*/
public  String getDateTime(){

try { 
       NTPUDPClient timeClient = new NTPUDPClient(); 
       InetAddress timeServerAddress = InetAddress.getByName("cn.pool.ntp.org");
       TimeInfo timeInfo = timeClient.getTime(timeServerAddress); 
       TimeStamp timeStamp = timeInfo.getMessage().getTransmitTimeStamp(); 
       return dateFormat.format(timeStamp.getDate()); 
   } catch (UnknownHostException e) { 
       e.printStackTrace(); 
       logger.error("与ntp服务器同步时间错误!", e);
       return dateFormat.format(new Date());
   } catch (IOException e) { 
    logger.error("与ntp服务器同步时间错误!", e);
       return dateFormat.format(new Date());
   }
}

/**
* @author  2013-11-21 下午05:55:43
* @功能:应用服务器时间与ntp服务器时间同步
*/
public void dateTimeSynchronization(){
try {
String datetime = getDateTime();
   String date = datetime.substring(0, 10);
   String time = datetime.substring(11);
   Runtime.getRuntime().exec("cmd /c date " + date); //修改应用服务器年月日
   Runtime.getRuntime().exec("cmd /c time " + time);//修改应用服务器时分秒
} catch (IOException e) {
logger.error("与ntp服务器同步时间错误!", e);

}

解决通过ntp服务器获取时间比系统时间少八个小时的问题;


JAVA获取时间比系统时间少八个小时的解决办

解决的办法把JAVA默认的时区改为东八区.

1,在系统属性里面添加如下一条:

system.setProperty("user.timezone", "Asia/Shanghai");
    2,把默认时区改成我们的时区:

TimeZone tz = TimeZone.getTimeZone("Asia/Shanghai");

        TimeZone.setDefault(tz);
    但是以上这些方法都只能用在我们自己的应用中,当我们获取时间的时候,改一下时区,但是对于那些应用服务器呢,它们以后记录日志什么的,时间肯定就错了. 于是我想有没有第三种方法可以把电脑恢复到更新以前呢,这样不用加任何代码,JAVA获取的时候都是正确了,就像更新以前一样,可是我的电脑关闭了系统还 原,然后找了一些卸载的工具,卸载所更新的更新包,可是时区的更新包却怎么样也卸不掉.

    后来想是不是更新后注册表有什么不同?打开看一下,
[HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows NT/CurrentVersion/Time Zones]

果然和我同事的没有更新的电脑上的注册表不一样,它的那个节点导出来是128KB,我的才72KB,于是我导入他的试了一下,再打开netbeans,再打印出时间,终于和系统的时间一样了.

    下面我把更新前的注册表文件放在这里,如果有碰到这个问题的朋友,可以先备注你自己的注册表,然后再导入它,看看行不行,如果行的话就很好了,如果不行,再还原你的注册表就可以了.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: