获取 EST 时区的 XMLGregorianCalendar 日期
Get XMLGregorianCalendar date in EST time Zone
我正在使用 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()
的 return 值具有误导性,因为它始终使用系统默认时区,但没有 "a Date
in the Eastern time zone".
这样的东西
我在评论中添加了 "possible",因为您并不清楚您要在此处实现的目标。此代码仅在 XMLGregorianCalendar
指定 date/time 但未指定时区时才有用,并且您想假设它实际上表示东部时区的值,并将其转换为即时时间。 是你想要的吗?
我正在使用 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()
的 return 值具有误导性,因为它始终使用系统默认时区,但没有 "a Date
in the Eastern time zone".
我在评论中添加了 "possible",因为您并不清楚您要在此处实现的目标。此代码仅在 XMLGregorianCalendar
指定 date/time 但未指定时区时才有用,并且您想假设它实际上表示东部时区的值,并将其转换为即时时间。 是你想要的吗?