1

我正在使用 Flex、GraniteDS 和 Java。Flex 在夏令时正确发送日期,例如“9 月 10 日 10:00:00 UTC-7”,但毕竟我收到相同的日期,但在标准时间“9 月 10 日 11:00:00:00 UTC-8 ”。据我了解,GraniteDS 正在错误地反序列化 Java Date。任何想法如何解决这个问题?

4

4 回答 4

1

这是因为您的 Flash 客户端和服务器之间的时区不同。假设: GMT + X:您的服务器的时区 GMT + Y:您的客户端的时区

解决问题的正确方法是在编组格式(XML、AMF ...)上定义固定时区,并将正确位置的日期转换为该时区。

例如:

当您从客户端向服务器发送消息时:客户端 GMT + Y -> 客户端将日期转换为 GMT + 0 -> AMF GMT + 0 -> 服务器端从 GMT + 0 转换为 GMT + X -> 服务器格林威治标准时间 + X

当服务器向客户端发送日期时:服务器 GMT + X -> 服务器端转换为 GMT + 0 -> AMF GMT + 0 -> 客户端转换为 GMT + Y -> 客户端 GMT + Y

使用 Granite,这意味着有 2 个修复要做:修改 Groovy 模板以将客户端的日期转换为 GMT+0,并在服务器端添加一个转换器(日期转换为日期但带有时区转换)。我现在已经在许多 Flex 项目上完成了这个补丁,它运行良好。

于 2013-08-28T17:08:05.143 回答
0

我不知道这是否能解决您的问题,但几年前我在 Flex 日期方面遇到了类似的问题。
我通过 ColdFusion 从 SQL 数据库获取一个表到 flex swf。我注意到日期已从 ColdFusion / 数据库服务器的时区转换为运行 Flex 应用程序的时区。也许这就是问题所在?

我解决了它(尽管它增加了很大的开销)以添加时区差异并在弹性端补偿时区

于 2011-09-20T13:39:42.020 回答
0

我们通过避免这个问题来处理这个问题,在层间传输时将所有日期格式化为字符串。

于 2011-09-20T13:53:03.820 回答
0

不,Granite 没有做错任何事情,它是内置的 Flash 时间转换。下面的链接澄清了。在某些应用程序中(可能比集中的“企业-y”应用程序更全球化的“Flash-y”应用程序)这是期望的行为,但通常不是。

对于解决方法,下面的链接有一个解决方案,并提到了一些其他的替代方案。

http://flexblog.faratasystems.com/2008/02/05/flex-local-datestime-transfer-issue

我通常更喜欢提到的作为字符串发送的解决方案 mezmo,但当然需求和集成(ORM ...)将推动决策。

(这种类型的问题通常存在于任何序列化在不同时区实例化的“日期/时间”对象的技术中。如果您以毫秒为单位考虑时间对象,则会设置一个新的 Date() 实例化到当前时间自 UNIX“诞生”以来的不同毫秒数,具体取决于时区。)

于 2012-10-01T19:48:59.073 回答