需要第三方架包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服务器获取时间比系统时间少八个小时的问题;
2,把默认时区改成我们的时区:
TimeZone.setDefault(tz);
后来想是不是更新后注册表有什么不同?打开看一下,
[HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows NT/CurrentVersion/Time Zones]
果然和我同事的没有更新的电脑上的注册表不一样,它的那个节点导出来是128KB,我的才72KB,于是我导入他的试了一下,再打开netbeans,再打印出时间,终于和系统的时间一样了.
下面我把更新前的注册表文件放在这里,如果有碰到这个问题的朋友,可以先备注你自己的注册表,然后再导入它,看看行不行,如果行的话就很好了,如果不行,再还原你的注册表就可以了.