Java:从服务器而不是系统时钟获取当前日期和时间

问题描述 投票:9回答:3

在我的Java程序中,我需要创建当前时刻的实例。我用

Date date = new Date();

这根据主机的系统时钟给出了当前日期和时间。有什么方法可以从在线服务器获取当前日期和时间吗?也许是世界时间服务器?

我见过this post,它描述了我想要的东西,但我担心我需要的帮助比那里提供的更多。

简而言之,我想获得一个不依赖于主机系统时钟的日期和时间。

谢谢!

java datetime
3个回答
7
投票

您可以查看可用的Java NTP客户端演示

http://www.docjar.com/html/api/examples/ntp/NTPClient.java.html

以及一些利用此客户端的示例代码

http://www.docjar.com/html/api/examples/ntp/TimeClient.java.html

这是大约170行记录良好的java代码。


5
投票

Local network

如果您的计算机已连接到本地网络,请连接到充当值得信赖的time server的某台计算机。你可以编写自己的时间服务器。

网络时间协议

或者你可以使用陈旧的Network Time Protocol (NTP)与大多数任何OS捆绑的现有服务器和客户端实现。有关更多信息,请参阅the accepted Answer by aioobe

考虑将该时间服务器计算机放在network’s DMZ中,以便从Internet上的时间服务器(例如pool.ntp.org projectthose provided by the United States federal government (NIST))进行更新。

Internet

如果您的计算机已连接到Internet,请连接到可信赖的时间服务器。如上所述,使用自定义协议(如Web服务)或使用NTP

这在问题中讨论,how to make my java app get global time from some online clock

另见问题:Java NTP clientJava client for time server, such as Network Time Protocol (NTP)

Radio Clock

获得具有radio clock连接的USB,用于通过连接到诸如原子钟的时间标准的无线电发射器发送的时间码同步的当前时间的输出。发射机正在世界各地的许多国家广播。

Meinberg Global公司,至少,提供several such devices

photo of a couple of external radio clock devices

GPS

与上面的无线电时钟类似,GPS(Global Positioning System)信号的接收器也可能捕获并传递time signal。或者也许GALILEOGLONASS或其他Radionavigation-satellite service

Sundial

sundial放在窗户外面。将webcam附加到相关计算机上。将网络摄像头放在窗口中。编写一个应用程序来解释日历当前图像的时间。

photo of a sundial on a pedestal in a garden

警告:此解决方案在Seattle中不起作用。


java.time.Clock

要利用当前时刻的任何供应商,请编写抽象java.time.Clock类的子类。

您可以将Clock实现作为参数传递给各种java.time方法。例如,Instant.now( clock )

Instant instant = Instant.now( yourClockGoesHere ) ;

出于测试目的,请注意Clock本身静态提供的Clock的替代实现:fixedoffsettick等。

避免使用最早版本的Java中的旧版日期时间类,例如DateCalendar。这些麻烦的类完全被java.time类取代。


About java.time

java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,如java.util.DateCalendarSimpleDateFormat

现在在Joda-Timemaintenance mode项目建议迁移到java.time班。

要了解更多信息,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规格是JSR 310

您可以直接与数据库交换java.time对象。使用符合JDBC driver或更高版本的JDBC 4.2。不需要字符串,不需要java.sql.*类。

从哪里获取java.time类?

ThreeTen-Extra项目使用其他类扩展了java.time。该项目是未来可能添加到java.time的试验场。你可能会在这里找到一些有用的类,如IntervalYearWeekYearQuartermore


-3
投票

通常,服务器会定期与在线时间服务器同步时间。所以你的服务器时间应该准确。如果没有,请联系您的管理员。

得到例如GMT时间,使用Calendar和TimeZone类。

© www.soinside.com 2019 - 2024. All rights reserved.