2011-09-20 14 views
1

我正在使用Flex,GraniteDS和Javа。 Flex在夏令時中正確發送日期,例如「9月10日10:00:00 UTC-7」,但畢竟我收到了相同的日期,但在標準時間「9月10日11:00:00:00 UTC- 8" 。據我瞭解,GraniteDS是錯誤地反序列化Java日期。 任何想法如何解決這個問題?Java將Date對象返回給Flex的錯誤

+0

本聲明中的'我'是什麼意思:「我在標準時間內收到同一日期」?你的意思是Java服務器?或者Flex客戶端?或者是其他東西? – JeffryHouser

+0

他是指Java VM的概率。他可能會使用Java的一個非常舊的版本,它尚未修補以解決幾年前實施的DST時間更改。 (一個特別討厭的「bug」,因爲它每年只會在特定的幾個星期內造成問題!) – Mifune

回答

0

我不知道這是否能解決您的問題,但幾年前我也遇到過與Flex日期類似的問題。
我正在通過ColdFusion將SQL數據庫中的表格轉換爲Flex swf。 我注意到日期是從ColdFusion /數據庫服務器的時區轉換到Flex應用程序運行的時區。也許這是問題?

我解決它(雖然它增加了一個顯著的開銷)在添加時區的差異,並在柔性結束

0

我們避免這個問題處理這個補償時區,層與層之間傳輸時格式化所有日期爲字符串。

0

不,花崗岩沒有做任何不正確的事情,它是內置的Flash時間轉換。以下鏈接闡明。在一些應用程序中(可能比全球化的「Flash-y」應用程序,而不是集中的「Enterprise-y」應用程序),這是期望的行爲,但通常不是。

對於解決方法,下面的鏈接有一個解決方案,並提到了其他一些替代方案。

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

我一般喜歡提到的發送身份字符串的解決方案mezmo,但當然要求&集成(ORM ...)將推動決策。 (這種類型的問題通常會存在於序列化在不同時區實例化的「日期/時間」對象的任何技術中。如果以毫秒爲單位考慮時間對象,則將新的Date()實例化爲當前時間將被設置爲自UNIX出生以來不同的毫秒數,取決於時區。)

1

這是因爲您的Flash客戶端和服務器之間的時區存在差異。 假設: GMT + X:你的服務器 GMT + Y的時區:您的客戶端

解決問題的正確途徑的時區是定義你的編組格式(XML,AMF固定的時區... )並將您的日期在正確的地方轉換爲此時區。

例如:

當您從客戶端發送消息到服務器: 客戶GMT + Y - >日期爲GMT + 0的客戶端轉換 - > AMF GMT + 0 - >服務器端格林威治標準時間GMT + 0 - >服務器GMT + X - >服務器端轉換爲GMT + 0 - > AMF格林威治標準時間GMT + 0 - >服務器GMT + >客戶端轉換爲GMT + Y - >客戶端GMT + Y

使用Granite,這意味着有2個修復程序需要做:修改Groovy用於客戶端將日期轉換爲GMT + 0的模板,並在服務器端添加Converter(轉換爲Date但帶時區轉換的日期)。 我已經在許多Flex項目上完成了這個補丁,它完美的工作。