将日期时间从 UTC 转换为用户位置时区

本文关键字:用户 位置 时区 转换 UTC 日期 时间 | 更新日期: 2023-09-27 18:36:28

在 db 中,我以 UTC 保存日期时间,如下所示:

CreatedDate = DateTime.UtcNow;

对于每个用户,我都以这种格式保存时区"+0200"、"-0300"、"-0430"

现在我想按日期过滤结果

SQL: SELECT * FROM tableName WHERE CreatedDate >= GETDATE()

如何将时区列的值添加到选定的日期时间?

将日期时间从 UTC 转换为用户位置时区

你可以做类似的事情

   DateTime utcDateTime = DateTime.UtcNow;
   TimeSpan offSet = TimeSpan.Parse("+01:00:00");
   DateTime checkDate = utcDateTime + offSet;

然后将checkDate作为参数传递给查询

根据您使用的语言,您可以从客户端应用程序获取此信息,例如 javascript。

var offset = new Date().getTimezoneOffset();

在 JavaScript 中获取客户端的时区

这样,您就不需要将其存储在数据库中。

若要为示例添加回时间,请使用解析和 DATEADD http://msdn.microsoft.com/en-gb/library/ms186819.aspx

这样:

storedDate.AddHours(double.Parse(timezoneOffset)/100).ToString();

未经测试!

编辑

或者使用这样的东西:(同样,未经测试)

TimeZoneInfo[] tz = TimeZoneInfo.GetSystemTimeZones().ToArray();
string t1 = tz.First(t => t.BaseUtcOffset == TimeSpan.FromHours(Math.Round((double.Parse(stored) / 100), 1))).Id;
DateTime time= TimeZoneInfo.ConvertTimeBySystemTimeZoneId(storedDate, t1);