【问题标题】:TimeZone issue in my java code我的 Java 代码中的时区问题
【发布时间】:2014-11-05 15:59:52
【问题描述】:

我正在尝试使用 TimeZone.getDefault() 获取本地时区,服务器在 CST 时区中运行,但每当我执行以下代码时,我得到的输出为“Wed Nov 5, 2014 03:52:22 PM GMT”,但我需要 CST 中的时区。我的代码有问题吗?

SimpleDateFormat dateFormat = new SimpleDateFormat("EEE, d MMM yyyy hh:mm:ss zzz");

Date dtTimeStamp = dateFormat.parse((String) map.get("TimeStamps")); 

SimpleDateFormat dateFormat2 = new SimpleDateFormat("E MMM d, yyyy hh:mm:ss a zzz");

TimeZone tzDefault = TimeZone.getDefault();

dateFormat2.setTimeZone(tzDefault);

dateFormat2.format(dtTimeStamp);

【问题讨论】:

  • 以后请format your code使其更具可读性。
  • 代码没有任何输出,所以你在这里问什么并不明显。

标签: java date datetime


【解决方案1】:

根据TimeZone.getDefault() JavaDoc

通常,您使用 getDefault 获得一个 TimeZone,它根据程序运行的时区创建一个 TimeZone。

因此,您必须明确提供所需的时区

TimeZone tzDefault = TimeZone.getTimeZone("GMT");

【讨论】:

  • 目前该程序正在时区为 CST 的服务器上运行,但我的代码正在返回 GMT。这就是问题所在。
  • 嗯,你的服务器操作系统和JRE版本是什么?
  • 操作系统:Win Server 2008 jre:1.5.0_05
【解决方案2】:

如果TimeZone.getDefault() 没有返回 CST,那么您的服务器不在 CST 时区中,或者没有这样配置。

value returned from TimeZone.getDefault() 由以下决定:

  • 使用 user.timezone 属性值作为默认时区 ID(如果可用)。
  • 检测平台时区 ID。平台时区和 ID 映射的来源可能因实施而异。
  • 如果给定或检测到的时区 ID 未知,则使用 GMT 作为最后的手段。

您可以检查您的服务器配置,也可以显式获取 CST 时区:

TimeZone timeZone = TimeZone.getTimeZone("CST");

【讨论】:

    猜你喜欢
    • 2019-06-06
    • 1970-01-01
    • 2020-12-20
    • 1970-01-01
    • 2012-04-27
    • 2012-09-11
    • 1970-01-01
    • 2020-03-01
    相关资源
    最近更新 更多