자 바스 크 립 트 Serializer 를 사용 하여 날짜 형식 을 정렬 할 때 주의해 야 할 문제

6787 단어 JavaScript
원문:
자 바스 크 립 트 Serializer 를 사용 하여 날짜 형식 을 정렬 할 때 주의해 야 할 문제
JavaScriptSerializer 는 DateTime 을 직렬 화 할 때 눈금 으로 표시 합 니 다.구체 적 으로 Json 에 서 는\/date(31554720000)\/  V 로 닫 기 를 진행 합 니 다.괄호 안에 Date 의 눈금 이 있 습 니 다.눈금 은 시간 이 똑 딱 거 치 는 밀리초 수 입 니 다.눈금 계산 시간 은 UTC 1970 년 1 월 1 일 자정 에 시 작 된 것 입 니 다.이 시작 시간 은 UTC 시간 이 므 로 다음 절 차 를 보십시오.

  
    
Customer cs = new Customer();
cs.BirthDay
= new DateTime( 1980 , 1 , 1 , 12 , 0 , 0 );
cs.Name
= " steven " ;
cs.Sex
= true ;

JavaScriptSerializer js
= new JavaScriptSerializer();
string output = js.Serialize(cs);

Customer cust
= js.Deserialize(output, typeof (Customer)) as Customer;
if (cust != null )
{

txtBirthDay.Text
= cust.BirthDay.Value.ToString();

}

이렇게 처리 할 때 문 제 는 바로 서열 화 된 날 짜 는 원래 의 1980-1-12:00:00 이 아니 라 utc 시간 에 따라 얻 을 수 있 는 시간 입 니 다.1979-12-31 4:00:00 일 수 있 습 니 다.이렇게 인터페이스 에서 UI 전 시 를 할 때 일치 하 는 문 제 를 가 져 올 수 있 습 니 다!
   다른 처 리 는 매우 간단 합 니 다.직렬 화 하기 전에 로 컬 시간 을 UTC 시간 으로 바 꾼 다음 에 반 배열 한 후에 UTC 시간 을 로 컬 시간 으로 바 꾸 면 됩 니 다.변 경 된 코드 를 보 세 요.

  
    
Customer cs = new Customer();
cs.BirthDay
= new DateTime( 1980 , 1 , 1 , 12 , 0 , 0 ).ToUniversalTime();
cs.Name
= " steven " ;
cs.Sex
= true ;

JavaScriptSerializer js
= new JavaScriptSerializer();
string output = js.Serialize(cs);

Customer cust
= js.Deserialize(output, typeof (Customer)) as Customer;
if (cust != null )
{

txtBirthDay.Text
= cust.BirthDay.Value.ToLocalTime().ToString();

}

자,이제 그만 하 자!

좋은 웹페이지 즐겨찾기