【问题标题】:Getting date in java on Centos OS is not correct?在 Centos OS 上用 java 获取日期不正确?
【发布时间】:2010-11-24 23:23:49
【问题描述】:

大家好 我有一个使用 spring 框架的 j2ee 应用程序 在在线服务器(centos os)上调试时 当试图通过打印new Date(); 对象的值来获取应用程序中的日期时 尽管通过终端获取服务器时间时,它会检索 GMT-6 中的时间 命令日期是在 GMT 时间检索的,是实时的,所以我想知道 GMT-6 是从哪里来的,为什么会出现这种奇怪的行为?

【问题讨论】:

    标签: java linux jakarta-ee centos


    【解决方案1】:

    这对我来说听起来像是一个语言环境问题。更具体地说,这不是问题,它只是 Java 处理不同时区/区域设置的方式。

    使用来自this article的代码:

    Properties p = System.getProperties();
    Enumeration keys = p.keys();
    while (keys.hasMoreElements()) {
      String key = (String)keys.nextElement();
      String value = (String)p.get(key);
      System.out.println(key + ": " + value);
    }
    

    您可以看到 Java 如何解释您的环境。

    如果您更改 CentOS 的时区/地区设置,Java 应该会接受该更改并相应地显示时间。

    但这听起来有点矫枉过正,而基于语言环境的customizing date format 可能正是您所需要的。

    不同的应用程序可能会以不同的方式输出相同的日期。

    【讨论】:

    • 请看我上面的回答,告诉我你怎么看?
    • @sword101: 输出的 GMT-6 时间是否正确?重启后会再次出现吗?如果是,什么时候?你的调试器是什么?
    • 是的,GMT-6 中的时间是正确的,是的,它在重新启动后再次发生,但我没有注意到这里的模式,我正在使用 log4j 进行调试...
    • @sword101: 你在用PatternLayout吗?如果是,您的日期转换说明符和日期格式说明符是什么?检查您的 log4j.properties 或 log4j.xml 文件。
    • 如果我使用简单的sysout语句,结果和调试器一样,我不认为问题与调试器有关,你怎么看?
    【解决方案2】:

    也许在您的应用程序的某个地方,默认时区更改为 TimeZone.setDefault(..)

    【讨论】:

    • 搜索了整个应用程序,没有找到将时区设置为默认值的东西。
    【解决方案3】:

    重启apache、tomcat后问题解决了……但还是不知道为什么会出现这种现象。

    【讨论】:

    • 检查以确保应用程序中没有代码更改默认 JVM 范围的时区。
    • 你能告诉我你认为什么方法可以做到这一点吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-23
    • 2021-08-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多