【发布时间】:2017-05-11 20:47:54
【问题描述】:
我的动机是获取当前日期而不关心系统日期。
【问题讨论】:
-
@Daniel 它不是重复的。如果系统日期设置为无效日期(如 1 年前),OP 正在询问如何获取正确的日期。
-
您有哪些来源可以询问正确的时间?
-
可能是从您的数据库中获取日期(我在这里看到 sql-server 标记)
标签: java
我的动机是获取当前日期而不关心系统日期。
【问题讨论】:
标签: java
我的建议,如果你真的不能依赖系统时间,那就使用时间服务器。 Apache commons 有一个非常有用的客户端,可以帮助解决这个问题。网上有很多例子:
https://commons.apache.org/proper/commons-net/apidocs/org/apache/commons/net/ntp/NTPUDPClient.html
还有许多可用的时间服务器。
不要试图自己在代码中更正日期,这将是脆弱的,并且如果有人更正服务器时间会破坏。
显而易见且更简单的解决方案是更正服务器上的时间!
【讨论】:
通过互联网访问time server。让您的应用程序联系该本地时间服务器以查询当前时间。
或者,在您的本地网络上设置time server。考虑将时间服务器计算机放在network’s DMZ 中,以便从 Internet 上的时间服务器(例如 pool.ntp.org project 或 those provided by the United States federal government (NIST))获取更新。
通过USB 连接获得radio clock 以输出当前时间,该时间代码由连接到时间标准(如原子钟)的无线电发射器发送的时间码同步。发射机正在世界各地的许多国家广播。
Meinberg Global 公司至少提供several such devices。
与上面的无线电时钟类似,GPS (Global Positioning System) 信号的接收器也可能捕获并转发time signal。或者GALILEO 或GLONASS。
将sundial 定位在窗外。将webcam 附加到相关计算机。将网络摄像头放置在窗口中。编写一个应用程序来根据日晷的当前图像解释一天中的时间。
警告:在西雅图不实用。
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 4.2 或更高版本的JDBC driver。不需要字符串,不需要java.sql.* 类。
从哪里获得 java.time 类?
ThreeTen-Extra 项目通过附加类扩展了 java.time。该项目是未来可能添加到 java.time 的试验场。您可以在这里找到一些有用的类,例如Interval、YearWeek、YearQuarter 和more。
【讨论】: