【问题标题】:Converting Times Between Time Zones in C#在 C# 中的时区之间转换时间
【发布时间】:2017-03-05 04:07:41
【问题描述】:

我有一个托管在远程服务器中的 C# MVC Web 应用程序。我不知道它的确切位置。

该应用程序的用户都来自 (UTC + 06.00) Dhaka。当用户插入新记录时,我想要插入的日期时间来自他的本地时间 e.i (UTC + 06.00) Dhaka。

我该怎么做?

【问题讨论】:

  • 查看网页:google.com/… & timtrott.co.uk/culture-codes。使用:IFormatProvider provider = System.Globalization.CultureInfo.GetCultureInfo("bn-BD"); DateTime date = DateTime.Parse("6:00", provider);
  • @jdweng - 抱歉,但时区和文化是两个截然不同的东西。文化只影响日期格式,不影响时区。

标签: c# timezone


【解决方案1】:

下面的代码解决了我的问题-

DateTime utcTime = DateTime.UtcNow;
TimeZoneInfo BdZone = TimeZoneInfo.FindSystemTimeZoneById("Bangladesh Standard Time");
DateTime localDateTime = TimeZoneInfo.ConvertTimeFromUtc(utcTime, BdZone);

【讨论】:

  • 这很适合转换。但是,您可能不应该在数据库中存储本地时间。在大多数情况下,您只想存储 UTC 并进行转换以供显示。有一些例外,但作为一般best practice,UTC 是我们存储时间戳的方式。
【解决方案2】:

您可以按照以下方法:

第 1 步: 您可以将 UTC 时间存储在数据库中。如果您使用的是 SQL,那么您可以使用 GETUTCDATE() 来获取 UTC 日期。

第 2 步

请使用Javascript设置cookie,存储浏览器时区。 (您可以使用jsTimeZoneDetect 之类的脚本来获取时区名称)

第 3 步

后端 C# 代码:

  1. 从 cookie 中提取时区。

  2. 从数据库中获取插入的utcTime并存储在局部变量中(utcTime是我使用的局部变量名)。

  3. 使用下面提到的代码将 UTC 时间转换为本地时间。

    TimeZoneInfo tzoneinfo = TimeZoneInfo.FindSystemTimeZoneById("浏览器时区名称"); DateTime localTime = TimeZoneInfo.ConvertTimeFromUtc(utcTime, tzoneinfo);

最后 localtime 是最终结果。 :)

希望对你有帮助

谢谢

【讨论】:

  • 除了,来自 jstz 的结果在 Windows 上不能被 TimeZoneInfo 使用。您必须先从 IANA 转换到 Windows。
【解决方案3】:

您应该使用 ASP.NET 应用程序的全球时区。检查this。除非您仅使用 C# datatime 函数,否则这将起作用。一旦你在 SQL Server 中有一些复杂的代码,它将使用 GETTIME 函数。您还将依赖 SQL Server 时区。

您应该在 UTC 中处理内部日期时间,并仅在 UI 中转换时区。

【讨论】:

  • 作为您链接到状态的问题的答案,无法在 asp.net 应用程序中全局设置时区。你也不应该。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-11-06
  • 2013-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多