在我的Java程序中,我需要创建当前时刻的实例。我用
Date date = new Date();
这根据主机的系统时钟给出了当前日期和时间。有什么方法可以从在线服务器获取当前日期和时间吗?也许世界时间服务器?
我见过this post,它描述了我想要的东西,但我担心我需要的帮助比那里提供的更多。
简而言之,我希望获得一个不依赖于主机系统时钟的日期和时间。
谢谢!
答案 0 :(得分: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代码。
答案 1 :(得分:5)
如果您的计算机已连接到本地网络,请连接到充当值得信赖的time server的某台计算机。你可以编写自己的时间服务器。
或者你可以使用陈旧的Network Time Protocol (NTP)与现有的服务器和客户端实现捆绑在一起的大多数OS。有关详情,请参阅the accepted Answer by aioobe。
考虑将该时间服务器计算机放在network’s DMZ中,以便更新来自互联网上的时间服务器,例如pool.ntp.org project或those provided by the United States federal government (NIST)。
如果您的计算机已连接到互联网,请连接到值得信赖的时间服务器。如上所述,使用自定义协议(如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
静态提供的offset
替代实施:fixed
,tick
,Date
等。
避免使用最早版本的Java中的旧版日期时间类,例如Calendar
& java.sql.*
。这些麻烦的类完全被 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。不需要字符串,不需要Finalize
类。
从哪里获取java.time类?
ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如Interval
,YearWeek
,YearQuarter
和more。
答案 2 :(得分:-1)
您可以使用以下代码:
LocalDate localDate = LocalDate.now();
int year = localDate.getYear();
int month = localDate.getMonthValue();
int date = localDate.getDayOfMonth();
答案 3 :(得分:-3)
通常,服务器会定期与在线时间服务器同步时间。所以你的服务器时间应该准确。如果没有,请与您的管理员联系。
获得例如GMT时间,使用Calendar和TimeZone类。