我使用的是Flex、GraniteDS和Javа。Flex正在正确地发送夏令时的日期,例如“9月10日10:00:00 UTC-7",但毕竟我收到相同的日期,但在标准时间”9月10日11:00:00:00 UTC-8“。据我所知,GraniteDS错误地反序列化了Java Date。有什么办法解决这个问题吗?
发布于 2013-08-29 01:08:05
这是因为flash客户端和服务器之间存在时区差异。假设: GMT + X:服务器的时区GMT + Y:客户端的时区
解决问题的正确方法是在编组格式(XML、AMF...)上定义一个固定的时区。并将您在正确地点的日期转换为此时区。
例如:
从客户端向服务器发送消息时: client GMT +Y ->客户端日期到GMT的转换+0 -> AMF GMT +0 ->服务器端从GMT +0到GMT +X ->服务器GMT +X
当服务器向客户端发送数据时: server GMT +X ->服务器端转换为GMT +0 -> AMF GMT +0 ->客户端转换为GMT +Y ->客户端GMT +Y
对于Granite,这意味着有两个修复要做:修改Groovy模板,以便在客户端将日期转换为GMT+0,以及在服务器端添加一个转换器(日期转换为日期,但带有时区转换)。我现在已经在许多Flex项目上做了这个补丁,它工作得很好。
发布于 2011-09-20 21:39:42
我不知道这是否能解决你的问题,但几年前我在Flex dates上也遇到过类似的问题。
我通过ColdFusion从SQL数据库中获取一个表到flex swf。我注意到日期从ColdFusion /数据库服务器的时区转换为运行Flex的时区。也许这就是问题所在?
我解决了这个问题(尽管它增加了很大的开销),增加了时区差异并补偿了flex端的时区。
发布于 2011-09-20 21:53:04
我们通过避免这个问题来解决这个问题,在层之间传输时将所有日期格式化为字符串。
https://stackoverflow.com/questions/7485669
复制相似问题