获取 EST 时区中的 XMLGregorianCalendar 日期



我正在使用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 日期吗?

我怀疑你应该把时区传递给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指定日期/时间但没有时区时,此代码才有用,并且您希望假设它实际上表示东部时区中的值,并将其转换为时刻。这就是你想要的吗?

相关内容

  • 没有找到相关文章

最新更新