【问题标题】:Dealing with different timezone and day time saving in ASP.NET MVC在 ASP.NET MVC 中处理不同的时区和时间节省
【发布时间】:2016-09-23 19:09:28
【问题描述】:

我在 ASP.NET MVC Web 项目中工作,管理员可以在其中设置日期时间(开始日期时间/结束日期时间)和时区以显示某些消息。还有其他用户可能在同一时区(作为消息设置)或可能在不同的时区。 现在的任务是当用户日期时间与管理员设置的一个匹配时显示管理员设置消息。

我无法弄清楚的是,与不同时区的日期时间进行比较的正确方法是什么? 任何帮助将不胜感激。

更新:

//显示日期时间选择器

@(Html.Kendo().DateTimePicker()
        .Name("datetimepicker")
        .HtmlAttributes(new { style = "width:100%;" })
)

//在管理页面显示时区

var allTimeZones = TimeZoneInfo.GetSystemTimeZones();

List<SelectListItem> timeZoneLists = allTimeZones.Select(timeZone => new SelectListItem {Value = timeZone.Id, Text = timeZone.DisplayName}).ToList();
ViewBag.TimeZoneLists = timeZoneLists;

谢谢。

【问题讨论】:

  • 始终使用 UTC 并且只显示本地时间
  • 你的意思是我应该从用户那里获取时间并从管理员那里获取初始设置时间,将它们转换为 UTC 时间并进行比较??
  • 您在设置时区时具体设置了什么?请给我们看一些例子。
  • 时区将是时区的下拉菜单,因此管理员可以选择任何时区。 postimg.org/image/uwqiqtfsr
  • 好的,但是请给我们一些您正在使用的示例代码。两边都有DateTimeTimeZoneInfo 吗?你在用DateTimeOffset吗?也许你已经硬编码了一个列表或其他东西。不清楚你的实现是什么,所以不清楚如何回答。请阅读帮助中心:How to create a Minimal, Complete, and Verifiable exampleHow do I ask a good question?

标签: asp.net-mvc datetime kendo-ui timezone


【解决方案1】:
// your input datetime and timezone
DateTime dt1 = ...
DateTime dt2 = ...
TimeZoneInfo tz1 = TimeZoneInfo.FindSystemTimeZoneById(...);
TimeZoneInfo tz2 = TimeZoneInfo.FindSystemTimeZoneById(...);

// Normalize each input to UTC
DateTime utc1 = TimeZoneInfo.ConvertTimeToUtc(dt1, tz1);
DateTime utc2 = TimeZoneInfo.ConvertTimeToUtc(dt2, tz2);

// compare
if (utc1 > utc2)
{
   // whatever
}

在进行转换之前,请确保dt1dt2 值的.Kind 属性都是DateTimeKind.Unspecified。如果它们填充了LocalUtc 种类,那么这将不会按预期运行。 (这通常在反序列化时控制。)

【讨论】:

  • 所以对于第一个日期时间,tiemzone 设置我可以检索信息,因为它是由管理员在网页中设置的,并且保存在数据库中。但是对于用户端,我如何从他们的浏览器中检索他们的时区?
  • 这是一个完全不同的问题,has been answered before。您还可以阅读 thisthisthis
猜你喜欢
  • 2021-09-09
  • 1970-01-01
  • 2014-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-10
  • 1970-01-01
相关资源
最近更新 更多