Java - 如何使当前日期独立于系统日期? [重复]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java - 如何使当前日期独立于系统日期? [重复]相关的知识,希望对你有一定的参考价值。

这个问题在这里已有答案:

我想知道当前的日期和时间。

代码

Calendar.getInstance();

表示运行程序的系统的日期和时间,系统日期可能是错误的。

那么,无论运行程序的系统的日期和时间是什么,我都可以通过哪种方式获得正确的当前日期和时间?

答案

如果您在互联网上,您可以询问已知且可信赖的时间来源。如果运行程序的人想阻止你的程序这样做(比如你给他们一个时间有限的许可证并且他们不想支付更多的时间),他们可能会欺骗或阻止这种连接。

在我所参与的一个项目中,我们在硬件中放置了一个安全,可靠的时间源,无法被篡改。它专为加密和许可而设计,并有一个Java库来访问它。对不起,我记不起设备的名称了。

所以答案可能是肯定的,也许不是。

另一答案

在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
另一答案

我完全不明白你的问题,但我可以回答你的标题:

GregorianCalendar gc = new GregorianCalendar(System.getCurrentTimeMillis());
int year = gc.get(Calendar.YEAR);
另一答案

您的系统是否可以访问Internet?如果是这样,您可以使用具有精确时间服务的同步(例如:http://tldp.org/HOWTO/TimePrecision-HOWTO/ntp.html)并授予您想要的权限。

另一答案

编程级别方法是为了从系统本身获取日期和时间而开发的。除了指定的系统之外,您无法修改它们以获取日期。

对于您的其他要求,如果您希望真正拥有它,则需要在客户端计算机和服务器之间进行同步。

另一答案

以下是从您选择的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));
  }

}

以上是关于Java - 如何使当前日期独立于系统日期? [重复]的主要内容,如果未能解决你的问题,请参考以下文章

java 获取当前日期,应该如何操作呢

java如何通过calendar类获取当前系统日期

JAVA中关于日期的最常见的操作

使 UDF 独立于 DATEFIRST 设置

easyui如何使datebox中当前日期以前的日期不可用,即使当前日期以前的日期置灰,无法选择

WordPress:如何在上传时使用当前日期重命名图像?