4

그래서 Azure가 UTC 시간으로 작동한다는 사실을 우연히 발견했습니다. 이것은 배치되었을 때만 이것을 발견했다는 사실을 제외하고는 괜찮습니다! (디버그 모드에있을 때 내 comps time을 사용하기 때문에 간과되었다.)보기에서 UTC Datetime에서 로컬 datetime으로 변환

그래서 datetime을 사용자에게 표시 할 수 있어야한다. 나는 UTC에 (그리고 선호) 상관 없어. 그러나 필자는 응용 프로그램에서 날짜가 팝업되는 장소가 많기 때문에 현지 시간을 표시하는 모든 디스플레이를 얻는 데있어 신속하고 더러운 솔루션이 무엇인지 궁금합니다. 나는 datetime을 위해 Editor 템플릿을 사용하려고 생각하고있었습니다. 이것은 좋은 생각입니까? 전환을 위해 무엇을 사용해야합니까?

답변

0

this 도와 드릴까요?

문제는 사용자가 서버에서 사용자의 표준 시간대를 모른다는 것입니다. 당신은 최고의 문화를 추측 할 수 있지만 시간대는 아닙니다. 그리고 "en-us"문화권은 사용자가 미국에 있다고 가정 할 때 적어도 4 개의 시간대를 가질 수 있습니다.

또 다른 방법은 사용자가 사이트에서 작업 할 때 원하는 시간대를 선택하거나 선택하도록하는 것입니다. 그런 다음이 choise를 쿠키 또는 프로필에 저장할 수 있습니다. 사용자의 시간대를 갖는, 당신은 유사한 여기에 방법에 시간대 사이를 변환 할 수 있습니다 : 당신이 정적 메소드 TimeZoneInfo 유형의 ConvertTimeFromUtc를 사용

var localDateTime = TimeZoneInfo.ConvertTimeFromUtc(utcDateTime, timeZone.TimeZoneInfo); 

합니다. 또한 TimeZoneInfo (내 경우 사용자 정의 유형의 속성) 인 TimeZoneInfo 설정을 유지하는 인스턴스가 있습니다.

jQuery solution으로 다시 돌아와서 -이 작은 함수를 document.ready()에서 호출하여 사용할 수 있습니다. 시간 표시 필드에 원하는 CSS 클래스를 추가하기 만하면됩니다.

결국 다중 표준 시간대 방문자를 대상으로하는 경우 최종 사용자가 백엔드에서 변환을 수행하기 위해 원하는 시간대를 요청하고 그 시간을 명시 적으로 표시하려면 ' preffered TimeZone을 선택했습니다.

+0

위의 행이 클라이언트 브라우저에서 실행되는 것으로 의심됩니다. 면도기 구문을 사용하면 코드가 서버에서 실행되고 클라이언트가 아닌 서버의 현지 시간대로 시간이 변환됩니다. 일부 순수한 자바 스크립트 또는 jquery 라이브러리가 구출 될 수 있습니다. – AKS

+0

@AKS 답변을주의 깊게 읽으면 서버에서도 ** ** 최종 사용자 시간대 **를 알 수 있습니다. 그리고 그것을 사용하여 변환합니다. – astaykov

1

사용자가 입력하고 자신의 시간대에 시간을 표시하고 제출을 위해 UTC로 변환하도록 허용 한 편집기 및 표시 템플릿이 여기에 있습니다.

올바른 디스플레이 및 편집기 템플릿을 선택하려면 UIHint 특성을 아래 표시된 각 모델의 UTC DateTime 필드에 대해 사용자 지정 값 "UTCTime"으로 설정해야합니다. 이 주석이없는 모델 날짜 시간은 영향되지 않습니다 :

[UIHint("UTCTime")] 
    [DataType(DataType.DateTime)] 
    public DateTime LastSeen { get; set; } 

/Views/Shared/EditorTemplatesUTCTime.cshtml : 조회수 \

@model DateTime? 
@{ 
    var name = Html.GetFieldNameForModel(); // See the HTML extension at the end of this post 

    var boxName = name + ".Value"; 
    var boxId = name + "_Value"; 
    var divId = name + "_UTC"; 
} 
@Html.TextBoxFor(m => m.Value, new { type = "datetime", onBlur ="$('#" + name + "').val(UTCDateFuncs.ToUTCDate($('#" + boxId + "').val()));$('#" + divId + "').html('UTC:' + $('#" + name + "').val());$('#" + boxId + "').attr('title','UTC:' + $('#" + name + "').val());" })<span id="@divId"></span> 
<script> 
    new function() { 
     var utcVal = $('#@(boxId)').val(); 
     $('#@(boxId)').val(UTCDateFuncs.FromUTCDate(utcVal)); 
     $('#@(boxId)').attr('title', 'converted from UTC ' + utcVal); 
    } 
</script> 
@Html.HiddenFor(m=>m) 

\ 공유 \ DisplayTemplates \ UTCTime.cshtml

@model DateTime? 
@if(Model.HasValue){<span class="UTCTime">@Model</span>} 

사이트 템플릿이나 어딘가에 필요한 자바 스크립트 :

// UTC Date 
$(function() { 
    $('.UTCTime').each(function() { 
     var oldtext = $(this).html(); 
     var result = UTCDateFuncs.FromUTCDate(oldtext); 

     $(this).html(result); 
     $(this).attr("title", "Converted from UTC " + oldtext); 
    }); 
}); 

var UTCDateFuncs = { 
    ToUTCDate: function (datetext) { 
     try { 

      var n = new Date(datetext); 
      offsetms = n.getTimezoneOffset() * 60 * 1000; 

      n = new Date(n.valueOf() + offsetms); 

      result = n.toDateString() + " " + n.toLocaleTimeString(); 

     } 
     catch (ex) { 
      console.warn("Error converting time", ex); 
     } 
     return result; 
    }, 

    FromUTCDate: function (datetext) { 
     var result; 
     try { 

      var n = new Date(datetext); 
      offsetms = n.getTimezoneOffset() * 60 * 1000; 

      n = new Date(n.valueOf() - offsetms); 

      result = n.toDateString() + " " + n.toLocaleTimeString(); 

     } 
     catch (ex) { 
      console.warn("Error converting time", ex); 
     } 
     return result; 
    } 
}; 

또한이 HTML 확장자 : \ Controllers \ Extensions \ HtmlExtensions도 사용합니다.CS

using System; 
using System.Web.Mvc; 

public static class HtmlExtensions 
{ 

    public static string GetFieldNameForModel<TModel>(this HtmlHelper<TModel> htmlHelper) 
    { 
     var ti = htmlHelper.ViewData.TemplateInfo; 
     var name = ti.HtmlFieldPrefix; 
     return name; 
    } 

} 

이것은 우리의 관리 페이지에 단독으로 사용되므로 에디터 상자에 변환의 결과를 보여줍니다 텍스트 상자 후하지 매우 사용자 친화적 인 범위가있다.

관련 문제