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

需要第三方架包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,再打印出时间,终于和系统的时间一样了.
    下面我把更新前的注册表文件放在这里,如果有碰到这个问题的朋友,可以先备注你自己的注册表,然后再导入它,看看行不行,如果行的话就很好了,如果不行,再还原你的注册表就可以了.

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值