我在东部时区为客户提供了这段代码:
public DateTime getActivityDate() {
return new DateTime(activityDate, DateTimeZone.UTC).minusHours(5);
}
客户报告说它一直在工作,直到11月份的时间改变为止。现在,他们正在报道他们正在看到的时代和#34;比东部时区提前1小时。"
有没有什么方法可以让我的工作节省时间和标准时间,而不是将它硬编码为minusHours(5)和minusHours(6)?
答案 0 :(得分:2)
是的,请在纽约使用适当的时区标识符 - 时间:
return new DateTime(activityDate, DateTimeZone.forID("America/New_York"));
顺便说一下:在这里做minusHours(5)
这样的时间算术是错误的想法,以便考虑到tz偏移。你在做什么,也在改变瞬间/由activityDate
给出的时刻,而不仅仅是在适当的时区更改本地表示。显示代码与提案之间差异的示例:
System.out.println(new DateTime(new Date(), DateTimeZone.forID("America/New_York")));
// 2016-12-19T11:05:58.507-05:00
System.out.println(new DateTime(new Date(), DateTimeZone.UTC).minusHours(5));
// 2016-12-19T11:05:58.573Z
我们有相同的“局部”表示但不同的偏移(-05对Z = + 00)导致不同的瞬间。只有我的提议能够产生正确的当地时间(纽约)和正确的时间。
答案 1 :(得分:1)
如果您使用的是org.joda.time.DateTime:
public static final DateTime getEasternUSLocalDateTime(DateTime pDateTimeUtc) {
// Convert the Date
DateTime convertedDate = originalDate.withZone(DateTimeZone.forID("America/New_York"));
// Return the localTime associated with the timeZone
return convertedDate.toLocalDateTime();
}