获取服务器日期问题

时间:2009-09-16 07:07:27

标签: java linux datetime

我遇到服务器日期(linux服务器)的问题。当我使用linux'date'命令时,我得到了正确的日期值(实际日期)。如果我修改一些文件 在服务器上,修改日期也是正确的(实际日期)。但是,如果我在服务器上使用java代码System.out.println(new Date()),我会得到1小时差异的日期 即linux'date'命令结果= Wed Sep 16 08:48:25 CEST,System.out.println(new Date())result = Wed Sep 16 07:48:25 GMT + 1 是这个linux配置问题还是错误的使用java获取日期。 感谢

date --rfc-2822; date +%s

星期三,2009年9月16日09:59:36 +0200 1253087976

System.out.println(new SimpleDateFormat("EEE', 'dd' 'MMM' 'yyyy' 'HH:mm:ss' 'Z").format(new Date()));
System.out.println(new Date().getTime() / 1000);

16 wrz 2009 09:00:33 +0100 1253088033

3 个答案:

答案 0 :(得分:1)

您必须确保在使用日期之前使用正确的时区(或日历,就此而言 - 不是日期不推荐?)。

例如:

/* Skipping the boring class def part. */
public static void main(String[] args) {
    Date date = new Date();
    DateFormat myDateFormat = new SimpleDateFormat();
    TimeZone firstTime = TimeZone.getTimeZone(args[0]);
    myDateFormat.setTimeZone(firstTime);
    System.out.println("-->"+args[0]+": " + myDateFormat.format(date));
}
然后,参数可以是您想要的时区,例如“IST”,“GMT”等等。

答案 1 :(得分:0)

这可能是一个时区/夏令时问题。使用:

java.util.Timezone.getDefault()

查看Java配置使用的时区以及夏令时是否适用。

答案 2 :(得分:0)

我建议你升级你的Java安装。您的JRE可能没有最新的夏令时规则。 Java获取自纪元以来的时间,并使用您当前的TZ设置来计算当地时间。 DST规则会不时更改,发生这种情况时,操作系统和JDK都需要更新。

您可以在问题中添加以下内容:

# unix
date --rfc-2822; date +%s

# Java
System.out.println(new SimpleDateFormat("EEE', 'dd' 'MMM' 'yyyy' 'HH:mm:ss' 'Z").format(new Date()));
System.out.println(new Date().getTime() / 1000);

应该输出如下内容:

Wed, 16 Sep 2009 17:26:08 +1000
1253085968