【问题标题】:Get XMLGregorianCalendar date in EST time Zone获取 EST 时区中的 XMLGregorianCalendar 日期
【发布时间】:2015-04-13 08:18:19
【问题描述】:

我正在使用TimeZone.setDefault(TimeZone.getTimeZone("EST")); 来获取 EST 时区,它对我来说工作正常。但有时由于默认的 JVM 时区,当没有人在我的项目中调用此方法时,我会得到时区 EDT。

public getTimeInEST(XMLGregorianCalendar date) {
    TimeZone.setDefault(TimeZone.getTimeZone("EST"));
    DateFormat formatter = new SimpleDateFormat("dd MMM yyyy HH:mm:ss z");
    formatter.setTimeZone(TimeZone.getTimeZone("EST"));
    String newTime = formatter.format(date.toGregorianCalendar().getTime());
    Date newDate = null;
    try {
        newDate = formatter.parse(newTime);
        System.out.println("ESTDate : " + newDate)
    } catch(ParseException e) {
        System.out.println(e.getMessage);
    }
}

有没有其他方法可以在不使用TimeZone.setDefault(TimeZone.getTimeZone("EST")) 的情况下在 EST 时区获取 XMLGregorianCalendar 日期?

【问题讨论】:

  • 你不需要同时设置默认时区和调用formatter.setTimeZone,确定吗?
  • 我得到 EST 时间没有任何错误,但我不想使用 TimeZone.setDefault(TimeZone.getTimeZone("EST"));获取 EST 时间。
  • 仅供参考,麻烦的旧日期时间类,如 java.util.Datejava.util.Calendarjava.text.SimpleTextFormat 现在是 legacy,被 java.time 类取代。见Tutorial by Oracle

标签: java date datetime timezone


【解决方案1】:

我怀疑您应该将时区传递给toGregorianCalendar。我还强烈建议使用全时区 ID 而不是缩写 - 毕竟,我怀疑您真的想要东部时间(EST 和 EDT)而不仅仅是 EST。

另外,不需要格式化字符串值然后解析它——你可以使用Calendar.getTime()

// Possibly...
public Date toDate(XMLGregorianCalendar date) {
    TimeZone zone = TimeZone.getTimeZone("America/New_York");
    Calendar calendar = date.toGregorianCalendar(zone, Locale.US, null);
    return calendar.getTime();
}

请注意,Date 值没有时区 - 它只是一个瞬间。 Date.toString() 的返回值具有误导性,因为它始终使用系统默认时区,但没有“东部时区的Date”之类的东西。

我在评论中包含了“可能”,因为不清楚您要在这里实现什么。此代码仅在XMLGregorianCalendar 指定日期/时间但没有时区时才有用,并且您想假设它实际上表示东部时区中的值,并将其转换为即时时间。 这是你想要的吗?

【讨论】:

  • 使用上述代码后,我在 IST 中获得了 timeZone。
  • 我正在传递 XMLGregorianCalendar 日期,我想要 EST 时区而不使用 TimeZone.setDefault(TimeZone.getTimeZone("EST"))
  • @UserJHa:“我想要 EST 时区”确切是什么意思,“我正在获取时区”确切是什么意思在IST“?仔细阅读中间段落 - 如果你有一个 java.util.Date 值,那 just 代表一个时间点。它没有时区。
猜你喜欢
  • 2018-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-06
相关资源
最近更新 更多