4

我正在开发 Flex 3 应用程序,我想知道如何在 actionscript3 中创建代表特定时区的 Date 对象?我的应用程序在国际上使用,我想为整个应用程序创建标准时区,根据研究,我发现我无法根据特定时区创建日期对象。对此有什么建议吗?仅供参考,所有业务逻辑都驻留在服务器上的 Java 上,而对于前端,我们使用的是 flex。

更新:

我正在从服务器获得时间以“Fri Sep 28 05:16:37 EDT 2012”作为“Fri Sep 28 05:16:37 EDT”,但是当我在 new Date() 中实例化时,它会抛出无效日期错误。所以我将其更正为“Fri Sep 28 05:16:37 GMT -0400 2012”并用 new Date() 实例化,但结果我在 IST 中得到,因此时区信息丢失。如何在 flex 中保留时区?

4

3 回答 3

4

假设您想将事物存储为 UTC....

在您的服务器中,您可以设置 JVM 参数

-Duser.timezone=UTC

无论计算机的时区如何,这都会强制服务器以 UTC 运行。

然后,当您将对象从 flex 传递回 java 时,您将不得不更新日期对象。就像是

 var utcDate:Date = new Date(d.valueOf() - (d.timezoneOffset * MS_OF_ONE_MIN));

其中 d 是您来自 flex 的日期,并且运行 PC Flex 的时区。

如果您使用的是 BlazeDS 之类的东西,那么您可以调用一个函数来转换RemoteObject中的所有日期,因为这是您执行序列化的对象。

您遇到的最大问题是 flex Date 对象上没有 setTimezone,这意味着您必须跳过所有这些环节才能获得 UTC 日期。

于 2012-09-28T09:41:01.533 回答
3

使用 Date 对象之外的 UTC 字段来接收统一时间。然后,您可以使用 getTimezoneOffset() 来接收当前计算机与 UTC 的距离。否则,请澄清您的问题,除了在本地 Date 对象的 UTC 数据中严格操作之外,我无法破译您实际需要什么。

于 2012-09-28T06:17:22.747 回答
1

理想情况下,什么都不应该关心您的服务器端时区 - 包括您的服务器。服务器位置不太可能具有任何有用的业务意义,并且能够在您想要的任何地方运行服务器可能非常有用。

相反,您需要弄清楚您的 UI 真正代表的是什么。它是实际时区中性的本地日期和时间吗?是否“只是一个日期”又将是时区中性的?它是一个特定的瞬间吗(例如,当一个特定的电话发生时,不管它发生在哪里)?(还有更多选项,但这些是最常见的选项。)

一旦你弄清楚了你的数据的真正含义,你就可以找出正确的方式将它传输到服务器(你还没有告诉我们任何关于它的事情),然后是如何在服务器上表示它。如果您使用Joda Time而不是内置java.util.Date和类,您的服务器端代码最终会更加清晰java.util.Calendar......您可以使用适当的 Joda Time 类型来表示上面列出的每个概念。

正如我所说,要抛弃的第一件事是您应该真正在服务器时区工作 - 或者至少,您必须证明这是一个极其不寻常且可能代价高昂的决定。

于 2012-09-28T06:35:16.440 回答