【问题标题】:How to create date in actionscript with particular timezone?如何在具有特定时区的动作脚本中创建日期?
【发布时间】:2023-04-11 04:50:01
【问题描述】:

我正在开发 Flex 3 应用程序,我想知道如何在 actionscript3 中创建代表特定时区的 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 中保留时区?

【问题讨论】:

    标签: java actionscript-3 apache-flex


    【解决方案1】:

    假设您想将事物存储为 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 日期。

    【讨论】:

    • 嗯,谢谢 RNJ... 但是更改服务器上的任何内容(例如 -DUser.timezone=UTC 等)都被排除在外,因为它太大的应用程序和更改服务器端无法轻松完成.. :(
    • @pradeepsimha 那么我想你可能会被卡住。没有 setTimezone 日期会让事情变得非常困难。也许您可以创建自己的 Date 对象来包装 flex 对象。您可以根据时区操作其中的 dte 和时间
    • @RNJ...是的,我打算向客户建议同样的事情...最初我认为这很容易,但现在事情变得复杂了..
    • @pradeepsimha 生活从来都不容易;)
    【解决方案2】:

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

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

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 我需要的是在 EDT/EST 时间上运行的服务器端代码和在 IST 时区运行的客户端代码(flex UI)。因此,当用户从 UI 中选择日期时,它将在 IST 中。我想要的是每当用户选择日期时在 UI 中,它应该在服务器时区而不是客户端时区。
      • 当然,使用 UTC 日期。当您基于 YMDhms 在客户端创建 Date 对象时,您会收到一个本地化日期,如果您的 Flash 检测到 IST,该日期将是 IST。服务器端代码应该仅以这种方式操作 UTC 日期,并且要传递 UTC 日期,您只需要使用 UTC 日期函数。完全忽略服务器端时区。
      • 如果您需要一种方法将 Date 对象传输到给定的服务器端区域,您首先必须以某种方式将其传递给客户端,然后使用给定的客户端输入(setUTCDate() 等)生成 UTC 日期) 然后明确添加小时以符合服务器端区域。
      猜你喜欢
      • 1970-01-01
      • 2020-04-28
      • 2018-10-03
      • 1970-01-01
      • 1970-01-01
      • 2021-09-19
      • 2018-09-30
      • 1970-01-01
      相关资源
      最近更新 更多