Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Grails-获取下一个/上一个时区 我正在使用GRAILS应用程序,但我找不到一个明确的方法来将日期从一个时区转换为下一个/前一个可用时区(我将定义下一个/下一个时区)。_Grails_Timezone_Period - Fatal编程技术网

Grails-获取下一个/上一个时区 我正在使用GRAILS应用程序,但我找不到一个明确的方法来将日期从一个时区转换为下一个/前一个可用时区(我将定义下一个/下一个时区)。

Grails-获取下一个/上一个时区 我正在使用GRAILS应用程序,但我找不到一个明确的方法来将日期从一个时区转换为下一个/前一个可用时区(我将定义下一个/下一个时区)。,grails,timezone,period,Grails,Timezone,Period,事实: 我正在Grails应用程序中使用日期过滤器,因此我们可以基于这些过滤器检索信息。应用程序支持时区,因此登录的用户可以将其配置文件设置为特定时区。 过滤器的日期采用UTC格式,数据库上的信息也存储在UTC上 问题: 用户记录的个人资料位于时区UTC+00。 有一个预定义的日期过滤器,称为“本周”,当用户单击它时,会生成一段与UTC当前周相对应的日期,以便我们可以从当前周获取数据库中的所有信息 如果我们是在当天(2015年11月19日星期四),过滤器将为“本周”查看数据库生成的日期为: 20

事实: 我正在Grails应用程序中使用日期过滤器,因此我们可以基于这些过滤器检索信息。应用程序支持时区,因此登录的用户可以将其配置文件设置为特定时区。 过滤器的日期采用UTC格式,数据库上的信息也存储在UTC上

问题: 用户记录的个人资料位于时区UTC+00。 有一个预定义的日期过滤器,称为“本周”,当用户单击它时,会生成一段与UTC当前周相对应的日期,以便我们可以从当前周获取数据库中的所有信息

如果我们是在当天(2015年11月19日星期四),过滤器将为“本周”查看数据库生成的日期为:

2015年11月15日星期日00:00:00 UTC至2015年11月22日星期日23:59:59 UTC

这是正确的,并将提供该时期数据库中的所有信息

现在,假设执行此操作的用户设置了时区UTC+01

如果我们是在当天(2015年11月19日星期四),则过滤器将生成用于查看数据库的日期将是相同的时期:

2015年11月15日星期日00:00:00 UTC至2015年11月22日星期日23:59:59 UTC

但在这种情况下,我需要将它们转换为正确的时区,因为当前用户的“本周”与UTC+01上的用户的“本周”不同,这是因为对于该用户,日期Sun Nov 15 00:00:00将对应于日期 UTC时间11月14日星期日23:00:00(因为他/她提前一个小时),因此当按“本周”筛选时,我应按日期搜索数据库:

2015年11月14日星期日23:00:00 UTC至2015年11月22日星期日22:59:59 UTC

问题是我创建了一个方法
utcdatetosertz(date)
,将UTCDate转换为本地时区日期,但这将转换UTC日期:

2015年11月15日星期日00:00:00 UTC至2015年11月22日星期日23:59:59 UTC

进入

2015年11月15日01:00:00 UTC周日至2015年11月23日00:59:59 UTC周日

这不是我想要的。我需要将这些日期转换为以前的时区

我希望不要带着一个更简单的解决方案到处走,在这种情况下,我希望你能告诉我是否存在更容易解决的问题

谢谢

前面评论的方法是:

public DateTime utcDateToUserTZ(Date date) {

    TimeZone profileTimeZone = getCurrentUserProfile().timeZone
    DateTimeZone dateTimeZone = DateTimeZone.forTimeZone(profileTimeZone)

    return new DateTime(date, dateTimeZone).withZone(dateTimeZone)
}

我创建了一个从UTCDate转换为LocalTimeZone日期的方法,您可以在这里添加该方法吗?我相信在这个方法中,偏移量
-01
被用作
+01
。确保使用偏移量的值而不是其绝对值。这意味着-1偏移量应该被用作-1,而不是它的绝对值
Math.abs(-1)
。嗨,dmhapatro,我已经编辑了这个问题并添加了这个方法,但是我认为这个方法工作得很好,(不要考虑偏移量,因为时区会考虑它),但这不是我想要的。