Fre*_*III 3 c# asp.net-mvc timezone datetimeoffset nodatime
在我们的ASP.NET MVC 5应用程序中,我们拥有带有时区ID(IANA)的用户配置文件.
public class User
{
public int Id { get; set; }
public string TimeZoneId { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
任务是在当地时间早上6点向所有用户发送电子邮件.我们的计划是每小时向所有时区发送电子邮件,当地时间是当时时间早上6点(根据服务器的UTC时间计算).
由于我们只有时区ID,我希望得到相应的时区ID,比方说,偏移-4:00:00 - 考虑到DST.
string[] timezoneIds;
Run Code Online (Sandbox Code Playgroud)
然后,我可以像这样查询我的数据库:
db.Users.Where(x => timezoneIds.Contains(x.TimeZoneId));
Run Code Online (Sandbox Code Playgroud)
我的问题显然是,这是一个体面的想法,还是我不知道这个问题的最佳做法?
谢谢.
Serge显示的"构建字典"的简单代码:使用LINQ的查找DateTimeZone.GetUtcOffset
,和Offset
键而不是TimeSpan
值:
var now = SystemClock.Instance.Now;
var provider = DateTimeZoneProviders.Tzdb;
var idsByCurrentOffset = provider.Ids.ToLookup(id => provider[id].GetUtcOffset(now));
Run Code Online (Sandbox Code Playgroud)
然后你可以使用:
var offset = Offset.FromHours(5);
foreach (var id in idsByCurrentOffset[offset])
{
...
}
Run Code Online (Sandbox Code Playgroud)
(您甚至不需要首先检查是否存在,因为查找索引器在显示查找中不存在的键时返回空序列.)
归档时间: |
|
查看次数: |
962 次 |
最近记录: |