在我的Java程序中,我需要创建当前时刻的实例。我用
Date date = new Date();
这根据主机的系统时钟给出了当前日期和时间。有什么方法可以从在线服务器获取当前日期和时间吗?也许是世界时间服务器?
我见过this post,它描述了我想要的东西,但我担心我需要的帮助比那里提供的更多。
简而言之,我想获得一个不依赖于主机系统时钟的日期和时间。
谢谢!
您可以查看可用的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代码。
如果您的计算机已连接到本地网络,请连接到充当值得信赖的time server的某台计算机。你可以编写自己的时间服务器。
或者你可以使用陈旧的Network Time Protocol (NTP)与大多数任何OS捆绑的现有服务器和客户端实现。有关更多信息,请参阅the accepted Answer by aioobe。
考虑将该时间服务器计算机放在network’s DMZ中,以便从Internet上的时间服务器(例如pool.ntp.org project或those provided by the United States federal government (NIST))进行更新。
如果您的计算机已连接到Internet,请连接到可信赖的时间服务器。如上所述,使用自定义协议(如Web服务)或使用NTP。
这在问题中讨论,how to make my java app get global time from some online clock。
另见问题:Java NTP client和Java client for time server, such as Network Time Protocol (NTP)。
获得具有radio clock连接的USB,用于通过连接到诸如原子钟的时间标准的无线电发射器发送的时间码同步的当前时间的输出。发射机正在世界各地的许多国家广播。
Meinberg Global公司,至少,提供several such devices。
与上面的无线电时钟类似,GPS(Global Positioning System)信号的接收器也可能捕获并传递time signal。或者也许GALILEO,GLONASS或其他Radionavigation-satellite service。
将sundial放在窗户外面。将webcam附加到相关计算机上。将网络摄像头放在窗口中。编写一个应用程序来解释日历当前图像的时间。
警告:此解决方案在Seattle中不起作用。
java.time.Clock
要利用当前时刻的任何供应商,请编写抽象java.time.Clock
类的子类。
您可以将Clock
实现作为参数传递给各种java.time方法。例如,Instant.now( clock )
。
Instant instant = Instant.now( yourClockGoesHere ) ;
出于测试目的,请注意Clock
本身静态提供的Clock
的替代实现:fixed
,offset
,tick
等。
避免使用最早版本的Java中的旧版日期时间类,例如Date
和Calendar
。这些麻烦的类完全被java.time类取代。
java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,如java.util.Date
,Calendar
和SimpleDateFormat
。
现在在Joda-Time的maintenance 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的试验场。你可能会在这里找到一些有用的类,如Interval
,YearWeek
,YearQuarter
和more。
通常,服务器会定期与在线时间服务器同步时间。所以你的服务器时间应该准确。如果没有,请联系您的管理员。
得到例如GMT时间,使用Calendar和TimeZone类。