我想知道当前的日期和时间。
代码
Calendar.getInstance();
表示运行程序的系统的日期和时间,系统日期可能不正确。
那么无论运行程序的系统的日期和时间如何,我都能以何种方式获得正确的当前日期和时间?
答案 0 :(得分:41)
在1.1之前的Java版本中,使用Date类是标准的:
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
答案 1 :(得分:7)
我完全不明白你的问题,但我可以回答你的问题:
GregorianCalendar gc = new GregorianCalendar(System.getCurrentTimeMillis());
int year = gc.get(Calendar.YEAR);
答案 2 :(得分:4)
如果您在互联网上,您可以提出已知且可信赖的时间来源。如果运行程序的人想要阻止你的程序这样做(就像你给他们一个时间有限的许可证并且他们不想支付更多的时间),他们可能会欺骗或阻止这种连接。
在我参与的一个项目中,我们在硬件中放置了一个安全,可靠的时间源,无法被篡改。它专为加密和许可而设计,并有一个Java库来访问它。对不起,我记不起设备的名称了。
所以答案可能是肯定的,也许不是。
答案 3 :(得分:3)
让您的系统上网吗?如果是这样,您可以使用具有精确时间服务的同步(例如:http://tldp.org/HOWTO/TimePrecision-HOWTO/ntp.html)并授予您想要的权限。
答案 4 :(得分:0)
编程级别方法是为了从系统本身获取日期和时间而开发的。除了指定的系统外,您无法修改它们以获取日期。
对于您的其他要求,如果您希望真正拥有它,则需要在客户端计算机和服务器之间进行同步。
答案 5 :(得分:0)
这里有一些代码可以从您选择的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));
}
}