2009-09-29 6 views
0

플렉스 Date 객체가 매우 이상하게 동작합니다. 내 웹 서비스는 .Net 3.5로 작성되었으며, 검색하거나 업데이트하는 모든 객체에는 .NET 코드의 Creation Date (날짜 유형)이 있습니다.플렉스 날짜 문제 - 잘못된 날짜 표시

그러나 .Net 웹 서비스를 호출하고 Flex에서 데이터를 표시 할 때 Flex는 웹 서비스에 저장된 것과 다른 Date를 표시합니다. Flex UI를 사용하여 객체를 업데이트 할 때마다 업데이트 시간은 .Net 코드에 설정된 실제 업데이트 시간과 매우 다릅니다.

아무도 내가이 문제를 해결할 수 있습니까?

+0

추가 정보 : 26 : 닷넷 webserice 코드에서 는 반환 날짜 2009-09-29T18로 : 21.3828335-06 : 00. Tue로 표시되는 플렉스 9 월 29 일 19:30:09 GMT-0600 2009. 문제는 개체를 업데이트 할 때마다 .Net이 현재 로컬 시간으로 업데이트 시간을 업데이트하지만 Flex가 각 업데이트 후에 매우 다른 시간을 표시한다는 것입니다. 올바른 현지 시간으로 변환하는 공식은 무엇입니까? –

답변

0

내가 즉각적인 답변을하지 않지만, 몇 가지 요인을 고려해야 할 :

  1. 날짜는 모호한인가? 반환 값의 샘플을 제공하지 않았지만 양측이 형식 (dd/mm/yyyy 또는 mm/dd/yyy)에 동의하지 않으면 09/10/2009와 같은 날짜가 모호합니다.

  2. Flex는 기본적으로 ECMAScript 형식이며 IETF RFC 1123 5.2.14 절의 형식이 올바르게 구문 분석되어야합니다. 예를 들면 :

    2009년 (월) 9월 28일 그리니치 표준시 21시 22분 0초

.NET의 Date 객체가 (난 내 머리 위로 떨어져 기억이 안나요)이 생성 할 수 있어야한다 Flex의 Date 객체는이를 파싱 할 수 있어야합니다.

3

날짜 문제는 Flex와 서버간에 시간대 및 직렬화가 처리되는 방식의 결과 일 수 있습니다. 나는 일도가 발생 설명 할 것이다 그래서 나는 플렉스 날짜와 자바 문제를 했어 :

  • This이 시간대 정보없이 UTC와 같은 방법 플렉스 전송 날짜에 대해 설명합니다.
  • 당신은 가정을 이해해야합니다. 닷넷은 날짜에 대해 시간대와 일광 절약 시간을 만듭니다. 나는 자바가 데이터베이스의 날짜를 서버의 시간대라고 가정했다.
  • 디버깅 중에 자신을 혼란스럽게하지 않으면 서 Flex 및 Server 측의 UTC를 비교하는 것이 유용하다는 것을 알았습니다.
  • 컴퓨터의 시간대를 변경하기 만하면 로컬 시스템의 다른 시간대를 Flex로 시뮬레이션 할 수 있습니다. 이것이 .Net에서 작동하는지 모르겠습니다.
  • 마지막으로 문자열에서 날짜를 구성하는 것이 내재적 인 직렬화를 이해하는 것보다 쉽기 때문에 날짜를 문자열로 변환하기 위해 사용자 지정 serialization을 사용했습니다.
0

플렉스 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> 

닷넷 WebService를 :

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

예를 들어 주셔서 감사합니다. 웹 서비스는 다른 몇 가지 앱에서 사용되며 웹 서비스 팀은 정의를 변경할 수 없습니다. 올바른 날짜 형식으로 웹 서비스에서 반환 된 Datetime을 변환 할 수있는 방법이 있습니까? 웹 서비스가 datetiem 반환 String.I 반환됩니다 .Net 웹 서비스에서 반환 된 결과를 XML.Web 서비스 "2009-09-30T15 : 44 : 36.4667877-06 : 00"보내고 플렉스 점점 2009-09-30T15 : 30T23 : 02 : 23.877Z (XML 형식). 일관된 논리가 없습니다. 개체를 업데이트 할 때마다 수정 된 시간이 이전 값과 매우 다릅니다. Flex가 Datetime 값을 변환하는 데 사용하는 로직을 이해할 수 없습니다. –