7

我在客户端(浏览器)上使用 GWT,在服务器上使用 Joda Time。我想执行一些以请求进入的日期(即 00:00:00 到 23:59:59)为界的数据库查找,时间边界基于用户(即浏览器)的时区。

所以我让 GWT 代码new java.util.Date()获取请求的时间,并将其发送到服务器。然后我像这样使用 Joda Time:

new DateTime(clientDate).toDateMidnight().toDateTime()

当然麻烦的是toDateMidnight(),在没有指定TimeZone的情况下,会使用系统(即服务器)的TimeZone。我一直在尝试找到一种简单的方法将 TimeZone 从浏览器传递到服务器,但运气不佳。在 GWT 中,我可以通过以下方式获得 GMT 偏移量:

DateTimeFormat.getFormat("Z").fmt(new Date())

这会导致类似“-0400”的结果。但是 Joda TimeDateTimeZone.forID()需要格式为“America/New_York”的字符串,或小时和分钟的整数参数。当然,我可以将“-0400”解析为 -4 小时 0 分钟,但我想知道是否没有更直接的方法可以做到这一点。

4

4 回答 4

4

您可以使用 java.util.Date 的getTimezoneOffset()方法。它已被弃用,但目前在 GWT 中处理日期是很常见的。

AFAIR,您可以在 Joda 时间指定类似于“UTC+4”的内容。

更新:我查了一下,它是“+04:00”。或使用DateTimeZone.forOffsetHours()甚至forOffsetMillis().

于 2010-04-27T22:11:46.603 回答
1

Gwittir ( http://www.gwtsite.com ) 是一个用于 GWT 的库,其中包括许多很酷的实用程序,如数据绑定、动画、反射等。但是,还有一些其他有趣的好东西,比如新的 Joda Time 集成。如果您曾经因 GWT 缺乏 java.util.Calendar 支持而感到沮丧,那么您会喜欢它,因为它使您可以轻松地在应用程序中进行日期操作。

于 2010-04-29T12:27:37.137 回答
0

我认为我有一个类似但略有不同的问题。

我实际上需要将客户端时区存储在服务器上,以便我可以发送有关存储在他们日历中的日期的消息。

日期以 UTC 时间存储在谷歌应用引擎中,当然我可以在创建约会时存储当前时区偏移量。例如,当我想发送一封包含即将到来的约会列表的摘要电子邮件时,问题就来了。这些约会需要通过客户的正确时区调整来抵消(我很高兴假设它们仍然与他们创建约会时处于同一时区)。

真正的问题来自夏令时调整,例如,我可能存储了 2010 年 10 月 30 日星期六下午 1 点 (BST[GMT+60]) 和 2010 年 11 月 1 日星期一下午 1 点 (GMT) 的约会。

所以你可以想象,我不能只使用当前时区偏移量 (BST),因为这意味着 11 月 1 日星期一的约会将被列为下午 2 点而不是下午 1 点 (GMT+60)

我突然想到,处理这个问题的最好方法就是单独存储每个约会的时区偏移量,但我觉得首先能够正确确定原始时区会好得多,然后让 java做正确的调整。

于 2010-09-28T13:05:56.823 回答
0

否则,还有其他方法可以使用 + & - 获得时区偏移量。

导入 java.util.TimeZone;

使用:TimeZone.getDefault().getRawOffset()

此函数将返回有关您的手机查看的偏移时间(以毫秒为单位)。例如,GMT-04:00 等于 (-4)*60*60*1000 = -14400000。

经过一些操作得到你想要的号码。

于 2010-04-29T02:28:52.357 回答