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

Ins*_*ous 9 java datetime

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

Date date = new Date();
Run Code Online (Sandbox Code Playgroud)

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

我看过这篇文章,它描述了我想要的东西,但我担心我需要的帮助比那里提供的更多.

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

谢谢!

aio*_*obe 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代码.


Bas*_*que 6

本地网络

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

网络时间协议

或者你可以用陈腐的网络时间协议(NTP)与大多数捆绑任何现有的服务器和客户端实现OS。有关更多信息,请参见aioobe接受的答案

考虑将时间服务器计算机放置在网络的DMZ中,以便从Internet上的时间服务器(例如pool.ntp.org项目美国联邦政府(NIST)提供的时间服务器)进行更新。

互联网

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

在“ 如何使我的Java应用程序从某个在线时钟获取全球时间 ”问题中对此进行了讨论。

另请参阅问题:Java NTP客户端时间服务器的Java客户端,例如网络时间协议(NTP)

无线电钟

获取带有USB连接的无线电时钟,以输出当前时间,该时间由连接到时间标准(例如原子钟)的无线电发射器发射的时间码同步。发射机正在世界许多国家广播。

Meinberg全球公司,至少,提供了几个这样的设备

几个外部无线电时钟设备的照片

全球定位系统

与上面的无线电时钟类似,GPS(全球定位系统)信号的接收器也可能捕获并中继时间信号。也许还有GALILEOGLONASS或其他卫星无线电导航服务

日d放在窗户外面。将网络摄像头连接到有问题的计算机。将网络摄像头放在窗口中。编写一个应用程序,以根据日d的当前图像解释一天中的时间。

日garden在花园的基座上的照片

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


java.time.Clock

为了利用当前的这些供应商中的任何一个,编写抽象java.time.Clock类的子类。

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

Instant instant = Instant.now( yourClockGoesHere ) ;
Run Code Online (Sandbox Code Playgroud)

出于测试目的,注意的可选的实施方式Clock从现有的静态Clock本身:fixedoffsettick,和更多。

避免使用最早的Java版本(例如Date&)中的遗留日期时间类Calendar。这些麻烦的类完全被java.time类所取代。


关于java.time

java.time框架是建立在Java 8和更高版本。这些类取代麻烦的老传统日期时间类,如java.util.DateCalendar,和SimpleDateFormat

现在处于维护模式Joda-Time项目建议迁移到java.time类。

要了解更多信息,请参见Oracle教程。并在Stack Overflow中搜索许多示例和说明。规格为JSR 310

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

在哪里获取java.time类?

ThreeTen-额外项目与其他类扩展java.time。该项目为将来可能在java.time中添加内容提供了一个试验场。你可能在这里找到一些有用的类,比如IntervalYearWeekYearQuarter,和更多

  • 支持日for,这显然是正确的答案。 (5认同)