Java Date对象问题

时间:2011-09-25 18:50:26

标签: java

我正在做一个基于日期和时间采取行动的java程序。 问题是,当我使用java.util.Date对象时,我发现它受到windows挂钟的影响,我不知道该怎么做,我需要将日期从不受任何影响,或者如果有人知道如何以另一种方式采取这种行动 非常感谢你

4 个答案:

答案 0 :(得分:0)

如果您需要特定的日期和时间,则需要使用所需的日期和时间实例信息创建Date的实例,而不是调用new Date(),这将为您提供current实例。使用GregorianCalendar或其他Calendar子类。

如果只想要Date相关,则需要将日期对象的时间(小时,分钟,秒,毫秒)缩小。

public static Date setTime(final Date date, final int hourOfDay, final int minute, final int second, final int ms)
    {
        final GregorianCalendar gc = new GregorianCalendar();
        gc.setTime(date);
        gc.set(Calendar.HOUR_OF_DAY, hourOfDay);
        gc.set(Calendar.MINUTE, minute);
        gc.set(Calendar.SECOND, second);
        gc.set(Calendar.MILLISECOND, ms);
        return gc.getTime();
    }

然后在Date date .setTime(date, 0, 0, 0, 0);

的{{1}}实例上

答案 1 :(得分:0)

有一些方法......您可以在网络上的某个地方设置服务,从中获取时间。通过这种方式,您可以确保运行此内容的所有PC使用相同的时间基准。

另一种方法是使用NTP服务器... Here是由设计NTP标准的人员正式发布的,如何使用Java客户端查询NTP服务器

答案 2 :(得分:0)

当你说“从未受到任何影响”时,你到底想到了什么?

由于用户可以(几乎总是)控制计算机的内部时钟,因此您需要从外部源检查日期和时间。请注意,内部时钟通常也会随着夏令时而变化。

如果您可以使用网络时间或来自互联网服务器的时间。 NIST有这样的服务http://www.nist.gov/pml/div688/grp40/its.cfm。您也应该查看网络时间协议。

但即便如此,理性上也可能被一个狡猾的人改变/改变。因此,如果您正在复制保护或与安全相关的事情,您可能需要重新考虑。

答案 3 :(得分:0)

java.util.Date类获取当前时间取决于系统时钟。系统时钟可以通过多种方式进行修改(挂钟就是其中之一)。

如果您不想使用系统时钟,我建议您尝试从Internet获取时间。 NTP等协议可以做到这一点。 Java中存在一些实现,请参阅http://support.ntp.org/bin/view/Support/JavaSntpClient