2009-09-29 31 views
0

我遇到了一個非常奇怪的Flex Date對象行爲。我的Web服務是使用.Net 3.5編寫的,並且所有正在回顧或更新的對象都具有.Net代碼中的創建日期(日期類型)。Flex日期問題 - 顯示錯誤的日期

但是,當我調用.Net Web服務並在Flex中顯示數據時,Flex顯示與存儲在Web服務中的Date不同的Date。當我使用Flex UI更新我的對象時,每次更新時間與由.Net代碼設置的實際更新時間大不相同。

任何人都可以幫我解決這個問題嗎?

+0

更多信息: 在.NET中webserice代碼返回日期爲2009-09-29T18:26 :21.3828335-06:00。 Flex將其顯示爲星期二九月29 19:30:09 GMT-0600 2009. 問題是,每當我更新我的對象時,.Net更新修改時間爲當前本地時間,但Flex在每次更新後顯示一個非常不同的時間。 將其轉換爲正確的當地時間的公式是什麼? –

回答

0

我沒有立即回答,但一些需要考慮的因素有:

  1. 是日期曖昧?您沒有提供樣本的回報可能是什麼樣的,但09/10/2009這樣的日期是不明確的,除非兩端都符合格式(日/月/年或月/日/年)。

  2. Flex基本上是ECMAScript的一種形式,IETF RFC 1123第5.2.14節中的格式應該正確解析。例如:

    星期一,2009年9月28日21點22分零零秒GMT

在.NET Date對象應該能夠產生(我不記得把我的頭頂部) Flex中的Date對象應該能夠解析它。

3

您的日期問題可能是Flex和您的服務器之間的時區和序列化處理的結果。我已經遇到Flex日期和Java的問題,所以我將解釋遇到的一些問題:

  • This描述Flex如何將日期轉換爲沒有時區信息的UTC。
  • 您還應該瞭解.Net對日期的時區和夏令時進行的假設。我相信Java假定數據庫中的日期位於服務器的時區。
  • 爲了避免在調試時混淆自己,我發現比較Flex和Server端的UTC有用。
  • 只需更改計算機時區,即可在Flex本地計算機上模擬其他時區。我不知道這是否適用於.Net。
  • 最後,我使用自定義序列化來將日期作爲字符串傳輸,因爲從字符串構造日期比理解正在發生的隱式序列化更容易。
0

的Flex app.mxml

<?xml version="1.0" encoding="utf-8"?> 
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" 
      creationComplete="init();"> 
<mx:Script> 
    <![CDATA[ 
     import mx.rpc.events.ResultEvent; 

     private function init():void 
     { 
      updateFlexTime(); 
     } 

     private function updateFlexTime():void 
     { 
      flexTimeLabel.text = new Date().toString(); 
      flexLocalTimeLabel.text = new Date().toLocaleString(); 
     } 

     private function refreshHandler(event:Event):void 
     { 
      dateTimeService.GetCurrentDateTimeAsString(); 
     } 

     private function onGetCurrentDateTimeAsString(event:ResultEvent):void 
     { 
      var value:String = String(event.result); 
      var currentDate:Date = new Date(Date.parse(value)); 

      remoteTimeLabel.text = currentDate.toString(); 
      remoteLocalTimeLabel.text = currentDate.toLocaleString(); 

      updateFlexTime(); 
     } 
    ]]> 
</mx:Script> 
<mx:Form> 
    <mx:FormItem label="Flex time:"> 
     <mx:Text id="flexTimeLabel"/> 
    </mx:FormItem> 

    <mx:FormItem label="Remote time:"> 
     <mx:Text id="remoteTimeLabel" 
       text="Press refresh button."/> 
    </mx:FormItem> 

    <mx:FormItem label="Flex local time:"> 
     <mx:Text id="flexLocalTimeLabel"/> 
    </mx:FormItem> 

    <mx:FormItem label="Remote local time:"> 
     <mx:Text id="remoteLocalTimeLabel" 
       text="Press refresh button."/> 
    </mx:FormItem> 

    <mx:Button label="Refresh" 
       click="refreshHandler(event)"/> 
</mx:Form> 
<mx:WebService id="dateTimeService" 
       endpointURI="http://localhost:2054/TestService.asmx" 
       wsdl="http://localhost:2054/TestService.asmx?wsdl"> 
    <mx:operation name="GetCurrentDateTimeAsString" 
        resultFormat="object" 
        result="onGetCurrentDateTimeAsString(event)"/> 
</mx:WebService> 

NET Web服務:

namespace Lab.StackOverflow 
{ 
    using System; 
    using System.Web.Services; 

    /// <summary> 
    /// Test date/time service 
    /// </summary> 
    [WebService(Namespace = "http://lab.stackoverflow.com/")] 
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
    [System.ComponentModel.ToolboxItem(false)] 
    public class TestService : WebService 
    { 
     /// <summary> 
     /// Get current date and time 
     /// </summary> 
     /// <returns> 
     /// Return UTC date time by RFC 1123 standard. 
     /// </returns> 
     [WebMethod] 
     public string GetCurrentDateTimeAsString() 
     { 
      return string.Format("{0:r}{1:zz}", DateTime.Now, DateTime.Now); 
     } 
    } 
} 
+0

感謝您的示例.Web服務已被少數其他應用程序使用,並且Web服務團隊無法更改定義。有什麼方法可以將Web服務返回的日期時間轉換爲正確的日期格式。假設Web服務將返回datetiem NOT String.I嘗試將.Net Web服務返回的結果轉換爲XML.Web服務正在發送「2009-09-30T15:44:36.4667877-06:00」,並且flex正在獲取2009-09- XML中的30T23:02:23.877Z。它沒有一致的邏輯。每次我更新對象時,修改時間都與舊值非常不同。我無法理解Flex使用什麼邏輯來轉換日期時間值。 –