Java - 如何使当前日期独立于系统日期?

时间:2010-05-23 12:08:27

标签: java date calendar

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

代码

Calendar.getInstance();

表示运行程序的系统的日期和时间,系统日期可能不正确。

那么无论运行程序的系统的日期和时间如何,我都能以何种方式获得正确的当前日期和时间?

6 个答案:

答案 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));
  }

}