将 DateTime 从 UTC 转换为用户位置时区
Convert DateTime from UTC to user location timezone
在 db 中,我将 DateTime 保存为 UTC,如下所示:
CreatedDate = DateTime.UtcNow;
我还为每个用户保存了这种格式的时区 "+0200", "-0300", "-0430"
现在我想按日期筛选结果
SQL: SELECT * FROM tableName WHERE CreatedDate >= GETDATE()
如何将时区列的值添加到选定的日期时间?
根据您使用的语言,您可以从客户端应用程序中获取,例如javascript。
var offset = new Date().getTimezoneOffset();
Getting the client's timezone in JavaScript
这样您就不需要将其存储在数据库中。
要为您的示例重新添加时间,请使用解析和 DATEADD http://msdn.microsoft.com/en-gb/library/ms186819.aspx
你可以做类似的事情
DateTime utcDateTime = DateTime.UtcNow;
TimeSpan offSet = TimeSpan.Parse("+01:00:00");
DateTime checkDate = utcDateTime + offSet;
然后将checkDate
作为参数传递给查询
有些东西喜欢这个:
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);
在 db 中,我将 DateTime 保存为 UTC,如下所示:
CreatedDate = DateTime.UtcNow;
我还为每个用户保存了这种格式的时区 "+0200", "-0300", "-0430"
现在我想按日期筛选结果
SQL: SELECT * FROM tableName WHERE CreatedDate >= GETDATE()
如何将时区列的值添加到选定的日期时间?
根据您使用的语言,您可以从客户端应用程序中获取,例如javascript。
var offset = new Date().getTimezoneOffset();
Getting the client's timezone in JavaScript
这样您就不需要将其存储在数据库中。
要为您的示例重新添加时间,请使用解析和 DATEADD http://msdn.microsoft.com/en-gb/library/ms186819.aspx
你可以做类似的事情
DateTime utcDateTime = DateTime.UtcNow;
TimeSpan offSet = TimeSpan.Parse("+01:00:00");
DateTime checkDate = utcDateTime + offSet;
然后将checkDate
作为参数传递给查询
有些东西喜欢这个:
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);