从本地客户端系统的时间转换为CST,反之亦然

时间:2009-10-13 04:49:52

标签: c# jquery asp.net-mvc timezone

我需要在CST时区存储日期时间,无论给出任何时区。

访问该应用程序的客户来自不同的时区,如IST,CST,EST,......

我需要将客户端在CST时区中输入的所有日期时间存储到我的数据库中。在检索时,我需要转换回当地时区。

如何实现它?

3 个答案:

答案 0 :(得分:2)

这样的事情最有可能为你效劳。我可能有一个不正确的时区ID值,但我认为这很接近。时区的东西可以在.NET 3.5 +

中找到
DateTime clientDateTime = DateTime.Now;
        DateTime centralDateTime = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(clientDateTime, "Central Time (US & Canada)");

编辑:

如果您可以通过检测客户端时区来存储DateTime,只要它们为您提供最佳选项的日期。然后,根据客户端时区,您可以根据客户端的本地时区呈现日期。

答案 1 :(得分:2)

通常接受以GMT / UTC格式在数据库中存储所有日期时间值。

对于那些想要为应用程序的不同用户将UTC值呈现给特定时区的人,如wilpeck提到的,建议您确定最终用户的区域设置,并且:

  • 持久存储时,使用UTC日期值存储区域设置
  • 读取时,将UTC值渲染为具有关联区域设置值的本地时间

修改

例如:

您可能有一个包含字段 StartDateTime 的表格,因此要支持多个时区,您可能需要一个额外字段 StartDateTimeOffset 。如果客户端位于印度标准时间(IST)区域,您的日期时间值可能为2009/10/13 14:45,即UTC的2009/10/13 09:15。因此,您将UTC值(2009/10/13 09:15)存储在 StartDateTime 字段中,并将偏移量+05:30存储在 StartDateTimeOffset 字段中。现在,当您从数据库中读回此值时,您可以使用偏移量将UTC日期时间值(2009/10/13 09:15)转换回2009/10/13 14:45的当地时间。

答案 2 :(得分:0)

尝试这样。

DateTime clientDateTime = DateTime.Now;
DateTime centralDateTime = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(clientDateTime, "Central Standard Time");

时区ID

DateTime currentTime = DateTime.Now;
Console.WriteLine("Current Times:");
Console.WriteLine();
Console.WriteLine("Los Angeles: {0}", 
                  TimeZoneInfo.ConvertTimeBySystemTimeZoneId(currentTime, TimeZoneInfo.Local.Id, "Pacific Standard Time"));
Console.WriteLine("Chicago: {0}", 
                  TimeZoneInfo.ConvertTimeBySystemTimeZoneId(currentTime, TimeZoneInfo.Local.Id, "Central Standard Time"));
Console.WriteLine("New York: {0}", 
                  TimeZoneInfo.ConvertTimeBySystemTimeZoneId(currentTime, TimeZoneInfo.Local.Id, "Eastern Standard Time"));
Console.WriteLine("London: {0}", 
                  TimeZoneInfo.ConvertTimeBySystemTimeZoneId(currentTime, TimeZoneInfo.Local.Id, "GMT Standard Time"));
Console.WriteLine("Moscow: {0}", 
                  TimeZoneInfo.ConvertTimeBySystemTimeZoneId(currentTime, TimeZoneInfo.Local.Id, "Russian Standard Time"));
Console.WriteLine("New Delhi: {0}", 
                  TimeZoneInfo.ConvertTimeBySystemTimeZoneId(currentTime, TimeZoneInfo.Local.Id, "India Standard Time"));
Console.WriteLine("Beijing: {0}", 
                  TimeZoneInfo.ConvertTimeBySystemTimeZoneId(currentTime, TimeZoneInfo.Local.Id, "China Standard Time"));
Console.WriteLine("Tokyo: {0}", 
                  TimeZoneInfo.ConvertTimeBySystemTimeZoneId(currentTime, TimeZoneInfo.Local.Id, "Tokyo Standard Time"));

https://docs.microsoft.com/en-us/dotnet/api/system.timezoneinfo.converttimebysystemtimezoneid?view=netcore-3.1

https://www.c-sharpcorner.com/blogs/how-to-convert-a-datetime-object-into-specific-timezone-in-c-sharp