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默认的时区改为东八区.
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,再打印出时间,终于和系统的时间一样了.
下面我把更新前的注册表文件放在这里,如果有碰到这个问题的朋友,可以先备注你自己的注册表,然后再导入它,看看行不行,如果行的话就很好了,如果不行,再还原你的注册表就可以了.
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,再打印出时间,终于和系统的时间一样了.
下面我把更新前的注册表文件放在这里,如果有碰到这个问题的朋友,可以先备注你自己的注册表,然后再导入它,看看行不行,如果行的话就很好了,如果不行,再还原你的注册表就可以了.
相关文章推荐
- Java 获取本地时间与网络时间
- Java 获取本地时间与网络时间
- java 通过网络 ntp 获取网络时间
- python 获取网络时间及修改本地时间
- python 获取网络时间及修改本地时间
- python 获取网络时间及修改本地时间
- 从服务器获取时间并修改本地时间
- java本地以及网络时间获取
- Java 通过 JNA (Java Native Access) 获取、设置 Windows 操作系统的文件创建时间、文件修改时间、文件访问时间
- java 获取服务器时间同步本地计算机时间
- Java通过URL下载网络文件,获取文件流并修改文件名
- 通过网络时间服务器获取日期和时间
- 通过java获取网络时间
- 时间通过网络连接时间服务器设置本地时间
- linux下通过网络获取本机时间
- Java获取网络请求时局域网内的本地IP
- 利用js获取当前本地时间和服务器时间
- 应用获取时间戳异常后通过系统应用修改时间
- Java获取本地服务器IP