Java 如何在actionscript中创建具有特定时区的日期?

Java 如何在actionscript中创建具有特定时区的日期?,java,actionscript-3,apache-flex,Java,Actionscript 3,Apache Flex,我正在开发Flex3应用程序,我想知道如何在actionscript3中创建表示特定时区的Date对象?我的应用程序在国际上使用,我想为整个应用程序创建标准时区,根据研究,我发现我无法基于特定时区创建date对象。有什么建议吗? 仅供参考,所有业务逻辑都位于服务器上的Java上,对于前端,我们使用flex 更新: 我将从服务器到flex的时间设置为“Fri Sep 28 05:16:37 EDT 2012”,但当我在new Date()中实例化时,会抛出无效的日期错误。因此,我将其更正为“Fri

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

更新:


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

使用UTC字段过期对象来接收统一时间。然后,您可以使用getTimezoneOffset()来接收当前计算机距离UTC的距离。否则,请澄清您的问题,我无法解释除了从本地日期对象严格使用UTC数据之外,您还需要什么。

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

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

一旦您了解了数据的真正含义,就可以找到将数据传输到服务器的正确方法(您还没有告诉我们这方面的任何信息),然后如何在服务器上表示数据。如果您使用而不是内置的
java.util.Date
java.util.Calendar
类,那么服务器端代码将更加清晰。。。您可以使用适当的Joda时间类型来表示上面列出的每个概念


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

假设您想将东西存储为UTC

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

-Duser.timezone=UTC
这将强制服务器以UTC运行,而不考虑计算机的时区

然后,当您将对象从flex传递回java时,您必须更新date对象。差不多

 var utcDate:Date = new Date(d.valueOf() - (d.timezoneOffset * MS_OF_ONE_MIN));
其中d是您的flex日期,并且具有运行flex的PC的时区

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


最大的问题是flex Date对象上没有设置时区,这意味着您必须跳过所有这些限制才能获得UTC日期。

我需要的是服务器端代码在EDT/EST计时上运行,客户端代码(flex UI)在IST时区上运行。所以当用户从UI中选择日期时,它将在IST中。我想要的是在用户界面中,每当用户选择日期时,它应该在服务器时区,而不是在客户端的时区。当然,使用UTC日期。基于YMDhms在客户端创建日期对象时,会收到一个本地化的日期,如果Flash检测到IST,则该日期将为IST。服务器端代码应仅以这种方式操作UTC日期,要传递UTC日期,只需使用UTC日期函数。完全忽略服务器端时区。如果您需要一种方法将日期对象传输到给定的服务器端时区,您首先必须以某种方式将其传递给客户端,然后使用给定的客户端输入(
setUTCDate()
等)生成UTC日期,然后简单地增加小时数以符合服务器端时区。嗯,谢谢RNJ。。。但是改变服务器上的任何东西(如-DUser.timezone=UTC等)都是不可能的,因为它的应用程序太大,改变服务器端也不容易(@pradeepsimha)那么我想你可能被卡住了。没有设置日期时区会让事情变得非常困难。也许你可以创建自己的日期对象来包装flex对象。你可以根据timezone@RNJ...是的,我打算向客户推荐同样的东西…起初我以为这是ea西,但现在事情变得越来越复杂了。@pradeepsimha生活从来都不容易;)