剑道时间选择器控制不考虑夏令时

时间:2016-05-19 01:53:23

标签: kendo-ui kendo-asp.net-mvc kendo-timepicker

我有MVC 5应用程序。我有以下工作流程:
从剑道时间选择器控件中选择一个时间 - >在服务器上将该时间转换为UTC - >将UTC时间存储在数据库中 - >从DB中检索UTC时间 - >将它绑定回时间选择器控件

服务器的时区是中央标准时间(UTC -6:00)

我有以下步骤:
1 GT;用户从Kendo Time选取器控件中选择一个时间并将其提交给服务器。例如,假设用户选择“下午6:00” 2 - ;在检查发布日期值时在服务器上,Kind属性为unspecified。这意味着如果我将此时间转换为UTC时间,它将使用服务器的时区来抵消时间。但是我认为我们希望客户的时区能够抵消 3>所以我想到了使用Kendo time picker的value()方法,该方法以字符串格式返回Wed May 18 2016 18:00:00 GMT-0500 (Central Daylight Time)的值。此值包含时区信息,包括日光节省 4>所以我添加了隐藏字段,在客户端我将字符串值分配给隐藏字段 5个在服务器上,我使用隐藏字段值转换为UTC并将其存储到数据库中。因此,上述值存储为UTC时间23:00:00。 (偏移量为-5)

到目前为止一切顺利

6个在其他屏幕上,我现在要向客户显示此值 7个现在,当我将此UTC时间绑定到时间选择器控件时,它显示下午5:00而不是下午6:00(即17:00:00而不是18:00:00)。这意味着它抵消了-6(即中央标准时间)。

问题:
1 GT;从时间选择器获取值时,它知道日光时区。 (正如我们在字符串中看到的那样)。但是,当我们将值设置为不考虑日光时区时。为什么?

模型

        public class Mymodel
        {       
            [DataType(DataType.Time)]        
            public DateTime OrderTime { get; set; }

            public string OrderTimeHidden { get; set; }

        }

查看:捕获时间

        @model MyNameSpace.Mymodel

        <div>
            @(Html.Kendo().TimePickerFor(x => x.OrderTime)
            .Format("hh:mm tt")
            .Value("08:00 PM")
            .HtmlAttributes(new { onkeydown = "javascript:return false;" })
            )
            @Html.HiddenFor(x=>x.OrderTimeHidden)
        </div>

Javascript:将模型发布到服务器

submit.click(function () {
    $('#OrderTimeHidden').val($("#OrderTime").getKendoTimePicker().value());

     // do post here
     $.ajax({...})
  })

控制器:将时间转换并存入数据库

        [HttpPost]
        public ActionResult Save(MyModel model)
        {
            var dt = DateTime.ParseExact(model.OrderTimeHidden.Substring(0, 33), "ddd MMM d yyyy HH:mm:ss 'GMT'K", CultureInfo.InvariantCulture);

            var entity = new MyEntity();

            //OrderTime on entity is of type TimeSpan
            entity.OrderTime = dt.ToUniversalTime().TimeOfDay; 

            SaveToDataBase(entity)

            return View("SomeView");
        }

控制器:显示UI上的时间

        [HttpGet]
        public ActionResult ViewTime()
        {
           var entity = GetEntityFromDataBase();
           var model = new MyModel();
           model.OrderTime = new DateTime(entity.OrderTime.Ticks, DateTimeKind.Utc)
           return View();
        }

查看:显示用户界面上的时间

        <div>
         @Html.Kendo().TimePickerFor(x => x.OrderTime)
            .Format("hh:mm tt");
        </div>

0 个答案:

没有答案