2016-09-30 2 views
1

여러 시간대에 걸쳐 여러 사용자와 다른 시스템에서 사용하는 시스템이 있습니다. 나는 Azure에서 그것을 호스팅하고있다. 모든 날짜를 서버 시간이 아닌 현지 시간으로 저장하려고합니다. 각 고객의 현지 시간대를 추적하여이를 수행 할 수 있으며 데이터베이스에 저장하기 전에 날짜를 상쇄하고 있습니다.MVC 시간대 날짜 변환 방지

지금까지 모든 것이 잘 작동하지만 날짜가 클라이언트의 브라우저로 다시 전송되면 MVC는 UTC (모든 Azure VM의 서버 시간)라고 생각하고 시간을 상쇄합니다.

이 문제를 방지하는 가장 효율적인 방법은 무엇입니까? DateTimeKind를 로컬로 설정하려고했지만 원하는 효과가 없습니다. 날짜가 아직 변환되었습니다. 나는 날짜를 문자열로 전달할 수 있다고 생각하지만 이것은 해킹처럼 보입니다. 그것을하기위한 더 좋은 방법이 있어야합니다.

귀하의 제안은 높이 평가됩니다.

+0

클라이언트를 미리 알면 현지 날짜를 저장하는 UTC로 변환하고 정보를 표시해야 할 때 특정 로캘로 다시 변환하면 더 쉽게 조정하고 유지 관리 할 수 ​​있습니다. 모든 것이 하나의 시간대 서버 측에 동기화 될 때 날짜 계산을하는 것이 더 쉽습니다. –

+0

datetimekind를 utc로 설정하면 어떻게됩니까? – JamieD77

+0

@ JamieD77. 나는 그것을 시도했지만 아무런 효과가 없었다. 어떤 이유로 날짜가 항상 변환됩니다. – dpdragnev

답변

1

검색 및 테스트를 며칠 후에 문제를 해결하는 솔루션을 찾았습니다. 여기에 포인트

public JsonResult GetModel() 
 
{ 
 
    EOListModel model = _repo.Getmodel(); 
 
    return Json(JsonConvert.SerializeObject(model)); 
 
}

커플 : 서버에서

는 는 - 방법은 JsonResult 반환 - 우리는 클라이언트에서 JSON 문자열

로 모델을 직렬화 :

$.ajax({ 
 
    type: "POST", 
 
    url: "/Controller/GetModel", 
 
    data: null 
 
    }).done(function (result) { 
 
    var m = JSON.parse(result); 
 
    ... 
 
});

결과는 JSON 문자열이 될 것이다 당신이 그대로 날짜와 개체를 얻을 것이다 구문 분석 후.

나는 이것이 최선의 방법이라고 생각하지 않지만 효과적이지만 최소한의 코드 변화 만 있습니다.

감사합니다.

편집 :

return Json(JsonConvert.SerializeObject(model, new JsonSerializerSettings { DateTimeZoneHandling = DateTimeZoneHandling.Unspecified }));

그렇지 않으면 자바 스크립트 또는 순간이 변환됩니다 : 당신은 또한 시간대를 추가하지 JSON.NET을 지시해야하는 서버 방법에

날짜. 자세한 내용은 http://www.newtonsoft.com/json/help/html/SerializeDateTimeZoneHandling.htm을 참조하십시오.