我正在使用Grails应用程序,我无法找到将日期从一个TimeZone转换为下一个/上一个TimeZone的明确方法(我将在下面定义我认为的下一个/上一个时区)。 / p>
事实: 我正在使用Grails应用程序中的日期过滤器,以便我们可以根据这些过滤器检索信息。该应用程序支持TimeZone,因此登录用户可以将其配置文件设置为特定时区。 过滤器的日期是UTC格式,数据库的信息也存储在UTC上。
问题: 记录的用户在时区UTC + 00上有他的个人资料。 有一个名为“本周”的预定义日期过滤器,当用户点击它时会生成一个与UTC当前周相对应的日期,这样我们就可以从当前周带来数据库的所有信息。
如果我们在当天(2015年11月19日星期四),过滤器将为“本周”生成的日期将在数据库中查看:
2015年11月15日00:00:00 UTC至2015年11月22日星期日23:59:59
这是正确的,并将在该时间段内提供有关数据库的所有信息。
现在,假设执行此操作的用户设置了时区UTC +01。
如果我们当天(2015年11月19日星期四),过滤器将在数据库中生成的日期将是同一时期:
2015年11月15日00:00:00 UTC至2015年11月22日星期日23:59:59
但是在这种情况下我需要将它们翻译成正确的TimeZone,因为当前用户的“本周”对于UTC +01上的用户来说不一样,这是因为对于这个用户来说日期是11月15日00:00:00将对应日期 太平洋时间11月14日23:00:00(因为他/她提前一小时)因此当按“本周”过滤时,我应该按日期搜索数据库:
2015年11月14日星期二23:00:00至2015年11月22日星期日22:59:59
问题是我创建了一个方法utcDateToUserTZ(date)
来从UTCDate转换为LocalTimeZone日期,但这会转换UTC日期:
2015年11月15日00:00:00 UTC至2015年11月22日星期日23:59:59
到
2015年11月15日星期一01:00:00至2015年11月23日星期日00:59:59
这不是我想要的。我需要将这些日期翻译成之前的TimeZone。
我希望不要再讨论一个有更简单解决方案的问题,在这种情况下,我希望你能告诉我是否有更容易解决的问题。
谢谢,
之前评论过的方法是:
public DateTime utcDateToUserTZ(Date date) {
TimeZone profileTimeZone = getCurrentUserProfile().timeZone
DateTimeZone dateTimeZone = DateTimeZone.forTimeZone(profileTimeZone)
return new DateTime(date, dateTimeZone).withZone(dateTimeZone)
}