c# - 如何从 NodaTime 中的偏移量获取所有 IANA 时区?

标签 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; }
}

任务是在本地时间早上 6 点向所有用户发送电子邮件。我们的计划是每小时向本地时间为早上 6 点(根据服务器的 UTC 时间计算)的所有时区发送电子邮件。

由于我们只有时区 ID,我希望获得相应的时区 ID,比方说,偏移量 -4:00:00 -- 考虑 DST

string[] timezoneIds;

然后我可以像这样查询我的数据库:

db.Users.Where(x => timezoneIds.Contains(x.TimeZoneId));

显然,我的问题是,这是一个不错的想法,还是有我不知道的针对此问题的最佳实践?

谢谢。

最佳答案

Serge 展示的“构建字典”的更简单代码:使用 LINQ 的查找、DateTimeZone.GetUtcOffsetOffset 键而不是 TimeSpan 值(value)观:

var now = SystemClock.Instance.GetCurrentInstant();
var provider = DateTimeZoneProviders.Tzdb;
var idsByCurrentOffset = provider.Ids.ToLookup(id => provider[id].GetUtcOffset(now));

然后你可以使用:

var offset = Offset.FromHours(5);
foreach (var id in idsByCurrentOffset[offset])
{
    ...
}

(您甚至不需要先检查是否存在,因为查找索引器在提供查找中不存在的键时会返回一个空序列。)

关于c# - 如何从 NodaTime 中的偏移量获取所有 IANA 时区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33544494/

相关文章:

c# - 并行编程互锁 C#

c# - 没有 Visual Studio 的 C# 中的 GUI

c# - 获取 api 响应时出错对象引用未设置为对象的实例

php - 计算哪些时区在 PHP 上具有特定的当前本地时间

Python 时区 - pytz.common_timezones 有太多

c# - 实现一个接口(interface)但具有不同的成员名称

c# - 如何使应用程序具有表单而不是表单?

c# - 使用 MVC 获取 DateTime 类型的数据

asp.net-mvc - 在非侵入式适配器期间使用 jQuery .ajax 进行验证

javascript - 如何设置 Node 进程的时区?