我想知道当前的日期和时间。Java - 如何获取与系统日期无关的当前日期?
代码
Calendar.getInstance();
表示在其上程序正在运行,系统日期可以是错误的系统的日期和时间。
所以有什么办法可以让我得到正确的当前日期和时间,而不管运行程序的系统的日期和时间如何?
我想知道当前的日期和时间。Java - 如何获取与系统日期无关的当前日期?
代码
Calendar.getInstance();
表示在其上程序正在运行,系统日期可以是错误的系统的日期和时间。
所以有什么办法可以让我得到正确的当前日期和时间,而不管运行程序的系统的日期和时间如何?
如果您在互联网上,您可能会问一个已知和可信的时间源。如果运行程序的人想要阻止程序执行此操作(例如,如果您授予他们有时间限制的许可证并且他们不想花费更多时间),则他们可能会欺骗或阻止该连接。
在我参加的一个项目中,我们在硬件中放置了一个安全可靠的时间源,这个时间源不会被篡改。它专为加密和授权而设计,并有一个Java库来访问它。对不起,我不记得设备的名称。
所以答案可能是,也许不是。
编程级别的方法开发为从系统本身获取日期和时间。您不能修改它们以获取除指定系统以外的日期。
为了您的额外要求,如果您希望真正拥有它,您需要在客户端计算机和服务器之间进行同步。
让您的系统上网吗?如果是这样,您可以使用与精确时间服务同步(例如:http://tldp.org/HOWTO/TimePrecision-HOWTO/ntp.html)并授予您想要的。
我不完全理解你的问题,但我可以回答你的标题:
GregorianCalendar gc = new GregorianCalendar(System.getCurrentTimeMillis());
int year = gc.get(Calendar.YEAR);
在早于1.1是标准使用Date级的Java版本:
Date now = new Date(); // Gets the current date and time
int year = now.getYear(); // Returns the # of years since 1900
然而在更新版本的Java中,大多数Date
类已被弃用(具体为getYear
方法)。现在是更标准使用Calendar类:
Calendar now = Calendar.getInstance(); // Gets the current date and time
int year = now.get(Calendar.YEAR); // The current year
哇,29 upvotes并没有回答这个问题,它具体询问如何得到系统时钟错误时的真实日期。 – 2017-01-01 23:39:25
@Paul Tomblin这个问题的原始标题是“Java - 如何获得当年?”这与实际问题不符。修改了。 – ltlBeBoy 2018-02-21 12:37:25
@ltlBeBoy我想这是太多的期望问题回答者和upvoters阅读比标题更多。 – 2018-02-22 12:37:51
下面是一些代码,从你选择的Web服务器中提取HTTP格式(通常UTC时区)的日期。
当然,如果您无法控制物理硬件和操作系统,没有什么能保证您能够与您要求的实际Web服务器进行通信......但无论如何。
package some.package;
import java.io.IOException;
import java.net.URL;
import java.net.URLConnection;
import java.util.List;
import java.util.Map;
public class Test {
private static String getServerHttpDate(String serverUrl) throws IOException {
URL url = new URL(serverUrl);
URLConnection connection = url.openConnection();
Map<String, List<String>> httpHeaders = connection.getHeaderFields();
for (Map.Entry<String, List<String>> entry : httpHeaders.entrySet()) {
String headerName = entry.getKey();
if (headerName != null && headerName.equalsIgnoreCase("date")) {
return entry.getValue().get(0);
}
}
return null;
}
public static void main(String[] args) throws IOException {
String serverUrl = args.length > 0 ? args[0] : "https://google.com";
System.out.println(getServerHttpDate(serverUrl));
}
}
日期是一个相对的事情......没有“正确的当前日期”这样的事情,除非你指的是特定的时区。 – 2010-05-23 12:11:10
好的..我怎样才能得到某个特定时区的正确日期和时间? – 2010-05-23 12:12:46
您必须从您当前系统的日期和时间开始 - 是吗? – Mark 2010-05-23 12:14:40