我应该如何根据野田时间填充 IANA/奥尔森时区列表?

2024-01-08

我在应用程序中使用 NodaTime,我需要用户从下拉列表中选择他们的时区。我有以下软要求:

1) 该列表仅包含对当前和不久的将来真实地点合理有效的选择。历史的、晦涩的和通用的时区应该被过滤掉。

2) 该列表应首先按 UTC 偏移量排序,然后按时区名称排序。这希望将它们按照对用户有意义的顺序排列。

我编写了以下代码,它确实有效,但并不完全符合我的要求。滤波器可能需要调整,我宁愿让偏移量代表基本(非 dst)偏移量,而不是当前偏移量。

建议?建议?

var now = Instant.FromDateTimeUtc(DateTime.UtcNow);
var tzdb = DateTimeZoneProviders.Tzdb;
var list = from id in tzdb.Ids
           where id.Contains("/") && !id.StartsWith("etc", StringComparison.OrdinalIgnoreCase)
           let tz = tzdb[id]
           let offset = tz.GetOffsetFromUtc(now)
           orderby offset, id
           select new
           {
               Id = id,
               DisplayValue = string.Format("({0}) {1}", offset.ToString("+HH:mm", null), id)
           };

// ultimately we build a dropdown list, but for demo purposes you can just dump the results
foreach (var item in list)
    Console.WriteLine(item.DisplayValue);

野田时间 1.1 有zone.tab 数据 http://noda-time.googlecode.com/hg-history/1.1.x/docs/api/html/T_NodaTime_TimeZones_TzdbZoneLocation.htm,因此您现在可以执行以下操作:

/// <summary>
/// Returns a list of valid timezones as a dictionary, where the key is
/// the timezone id, and the value can be used for display.
/// </summary>
/// <param name="countryCode">
/// The two-letter country code to get timezones for.
/// Returns all timezones if null or empty.
/// </param>
public IDictionary<string, string> GetTimeZones(string countryCode)
{
    var now = SystemClock.Instance.Now;
    var tzdb = DateTimeZoneProviders.Tzdb;

    var list = 
        from location in TzdbDateTimeZoneSource.Default.ZoneLocations
        where string.IsNullOrEmpty(countryCode) ||
              location.CountryCode.Equals(countryCode, 
                                          StringComparison.OrdinalIgnoreCase)
        let zoneId = location.ZoneId
        let tz = tzdb[zoneId]
        let offset = tz.GetZoneInterval(now).StandardOffset
        orderby offset, zoneId
        select new
        {
            Id = zoneId,
            DisplayValue = string.Format("({0:+HH:mm}) {1}", offset, zoneId)
        };

    return list.ToDictionary(x => x.Id, x => x.DisplayValue);
}

替代方法

您可以使用基于地图的时区选择器 https://github.com/dosx/timezone-picker.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我应该如何根据野田时间填充 IANA/奥尔森时区列表? 的相关文章

  • 在 C# 中获取特定时区的日期时间时出现 System.TimeZoneNotFoundException 错误

    我有一个 JSON 文件 其中包含time zone范围 它的值如下London Casablanca Arizona Pacific Time US Canada 等 基于time zone 我想得到DateTime该时区的结果 例如 C
  • 通过 EWS 为用户提供时区和工作时间

    是否可以通过EWS获取用户的时区和工作时间 我能够提取当前用户的 TZ 和工作时间 初始化 ExchangeService 的帐户 UserConfiguration usrConfig UserConfiguration Bind ser
  • 在android中以编程方式设置设备时间[重复]

    这个问题在这里已经有答案了 我需要动态设置设备时间 如果可能 请指导我 据我尝试 MainActivity java Calendar c Calendar getInstance c set 2010 1 1 12 00 00 清单文件
  • 如何生成与 java TimeZone 对应的良好时区下拉列表

    其他网络应用程序使用什么策略来生成格式良好的时区列表以满足用户偏好 我尝试获取所有时区 但列表很长 而且格式不适合用户 只是想知道其他人是如何做到这一点的 下面的代码片段 String ids TimeZone getAvailableID
  • .NET 通过时区名称获取时区偏移量

    在数据库中 我将所有日期 时间存储为 UTC 我知道用户的时区名称 例如 美国东部标准时间 为了显示正确的时间 我想我需要将用户的时区偏移量添加到 UTC 日期 时间 但是我如何获得时区名称的时区偏移量 谢谢你 您可以使用TimeZoneI
  • 如何使用 H2 进行 JUnit 测试来防止日期更改?

    对于使用 H2 的 JUnit Test 我正在保存一个具有 LocalDate 属性和值的实体LocalDate parse 1900 01 01 测试失败 Expected is lt 1900 01 01 gt but was lt
  • PHP 时区 getTransitions 值得信赖吗?

    您是否曾经遇到过通过 getTransitions 函数进行 PHP 时区转换的任何问题 我正在尝试将阿根廷日期转换为 GMT 如果我查看转换数组 我会得到 63 gt Array ts gt 1287284400 time gt 2010
  • php:通过 UTC 偏移量设置时区

    使用 javascript 我知道我的用户时区是 UTC 3 现在我想用这些知识创建 DateTime 对象 usersNow new DateTime now new DateTimeZone 3 我收到回复 Unknown or bad
  • pytz - 将 UTC 和时区转换为本地时间

    我有一个datetime以 utc 时区为例 utc time datetime datetime utcnow 和 pytz 时区对象 tz timezone America St Johns 正确的转换方法是什么utc time到给定的
  • 向 Spring @Scheduled 提供时区?

    如何为基于 Spring 的系统配置时区 预定 http static springsource org spring docs 3 2 x spring framework reference html scheduling html s
  • 获取特定时区的当前时间

    我有一个具有不同时区的日期和时间格式的数据框 我想将其与该时区的当前时间进行比较 所以我想在下面的 日期和时间 列中添加 1 小时 然后将其与该时区的当前时间进行比较 就像第一个一样 时区是 EDT 当前时间是 2017 07 18 10
  • 将 tzinfo 插入日期时间

    我有以下内容tzinfo具体子类定义 from datetime import datetime timedelta tzinfo class ManilaTime tzinfo def utcoffset self dt return t
  • 如何将日期时间从一个任意时区转换为另一个任意时区

    假设我在请求中收到一个任意日期时间对象 如下所示 它可能来自任何可能的时区 我不知道是哪一个 举例来说 假设它来自东海岸 import pytz from colander import iso8601 ests1 iso8601 pars
  • 如何在 POSIXct 中获取一天的开始

    我的一天开始于2016 03 02 00 00 00 Not 2016 03 02 00 00 01 我如何开始一天的工作POSIXct当地时间 我的困惑可能来自于 R 认为这是 2016 03 01 的结束日期这一事实 鉴于 R 使用 I
  • 从纬度和经度获取 Windows TimeZoneInfo

    在网络应用程序中 我让人们输入他们的地址 然后我使用Google 的地理编码 API获取他们的纬度和经度 接下来 我想得到他们的Windows 时区名称使用这些坐标 这样我就可以处理夏令时正确通过 NetTimeZoneInfo objec
  • 使用 Java 8 时间将时间从一个时区转换为另一时区

    我正在尝试将日期转换为GMT 5 30 to EST与java 8ZonedDateTime String inputDate 2015 04 30 13 00 DateTimeFormatter sourceFormatter DateT
  • 在不同时区之间格式化时间的正确方法是什么?

    我想将 19 19 00 之类的时间格式化为不同的时区 如果我使用SimpleDateFormat它始终考虑纪元的开始 1970 01 01 有些时区在纪元开始时和现在有不同的偏移量 例如 现在与欧洲 基辅的默认偏移量是 UTC 0200
  • Momentjs 时区 - 获取特定时区时间的日期

    我正在尝试根据用户特定时区的 UTC 基准 创建日期 在本例中使用 momentjs momentjs 时区的 美国 洛杉矶 但是 我没有得到我期望的结果 var tempDate moment 1448841600000 moment 2
  • c/c++ strptime() 不解析 %Z 时区名称

    我是 C 语言的新手 当我练习 C 语言时 我会花时间来回构建 tm 我注意到一些不同 请告诉我我做错了什么 include
  • Java:getTimeZone不返回默认值

    我有以下指示 TimeZone zone TimeZone getTimeZone Asia Toyo 显然 它应该返回 null 但它会返回默认时区 这不是我的情况所需的行为 来自 Java 文档 返回指定的TimeZone 或 GMT

随机推荐

  • 可以从 Azure 网站使用新的 Azure 文件服务吗?

    标题基本概括了所有内容 微软刚刚在 Azure 上推出了新的文件服务 http blogs msdn com b windowsazurestorage archive 2014 05 12 introducing microsoft az
  • 可空引用类型和构造函数警告

    我正在尝试在我的项目中采用 C 8 的可为空引用类型 并使其与 EF Core 顺利配合 下列的本指南 https learn microsoft com en us ef core miscellaneous nullable refer
  • Spring Boot:Thymeleaf 打包后无法解析片段

    我使用这样的片段 RequestMapping value fragment nodeListWithStatus method RequestMethod GET public String nodeListWithStatus Mode
  • SQL 查询登录信息

    选择所有 MSSQL Server 登录名的 SQL 查询是什么 谢谢 你们中不止一位得到了我一直在寻找的答案 SELECT FROM syslogins 这就是你所追求的吗 select from master syslogins
  • 使用 MOSES 将印地语翻译成英语的统计机器

    我需要使用 MOSES 创建一个印地语到英语的翻译系统 我有一个平行语料库 包含大约 10000 个印地语句子和相应的英语翻译 我按照中描述的方法进行操作基线系统创建页面 http www statmt org moses n Moses
  • PHP:获取 TEXTBOX 的值,然后将其传递给 VARIABLE

    我的问题是 我想获取textbox1的值 然后将其传输到另一个页面 其中textbox1的值将出现在textbox2中 下面是我的 PHP 代码
  • 如何在不耗尽内存的情况下导出具有数字格式的 100K 记录的 HTML 表格

    我在用着PHP and MySQL获取数据到HTML桌子 数据应该下载HTML在 Excel 文件中 使用以下代码 filename individual list date Ymdhms xls header Content type a
  • 如何改进读取文件函数并抓取数据以获得比 file() 更好的性能?

    我的文件每天 00 00 重新创建 并且在白天缓慢开始逐行添加日志文件 该文件大约 1 mb 一天结束时约有 6 000 行 所以 它并不是真正的小文件 我的问题是如何使脚本具有更好的性能 因为file 实际上是逐行读取整个文件 那么有什么
  • 将 zip 文件从 iOS 应用程序流式传输到 Web 浏览器

    我的应用程序运行一个 HTTP 服务器 可以连接到同一 Wifi 网络上的桌面 Web 浏览器 目前 这可以处理对图像等的个人请求 我想找到一种方法将多个图像和文件一次性传输到浏览器 这些尺寸太大 无法在发送之前在 iPhone 内存中构建
  • 如何使用 spring mvc 访问 thymeleaf 模板中的变量

    如何在 thymeleaf 模板内访问在 Spring MVC 中添加到模型中的变量 我有以下控制器代码 Controller public class ThymeLeafController GetMapping thyme public
  • 从 PDF 中提取文本(谷歌应用引擎)

    是否有任何免费的 Java 库可以从 PDF 中提取文本 并且与 Google 应用程序引擎兼容 我读过有关 PDFJet 的内容 但它无法读取 PDF 不是吗 是否还有其他方法从 PDF 中提取文本 我试过http www pdfdown
  • Django 迁移默认值可调用生成相同的条目

    我正在向现有数据库表添加一个新字段 它是用字符串自动生成的 这是我的代码 from django utils crypto import get random string Model verification token models C
  • ConfigParser python 中的重复键

    我正在尝试使用 configparser 从部分中提取选项的重复值 我已经搜索并尝试了提供的解决方案here https stackoverflow com a 15848928 3979024 这样 我就可以提取选项部分的重复键的值 但是
  • 通过 SSH 将 dict 作为参数传递给 Python 脚本

    我正在尝试使用传递 dict 参数ssh命令通过os module os system f ssh remote host python u dict1 dict2 lt local script py 我收到错误 sh line 0 意外
  • 如何在 Perl 中验证图像文件?

    我如何验证 jpg 文件是有效的图像文件 我们正在使用 FTP 将文件写入目录 但我们似乎在文件完成写入之前就获取了该文件 从而创建了无效图像 我需要能够确定何时不再写入它 有任何想法吗 最简单的方法可能是将文件写入临时目录 然后在写入完成
  • 以编程方式创建 postgreSQL 数据库 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我正在 Visual Studio
  • 局部静态变量被实例化多次,为什么?

    我对从这段代码中得到的结果感到困惑 在一个 dll 中 当静态变量初始化时 计数器就会递增 然后 当执行 main 时 我读取了这个计数器 但我得到 0 而不是 1 有人可以向我解释一下吗 在我的动态库项目中 Header file cla
  • 通过适配器描述更改Mac地址

    我正在使用 Nate True 提供的优秀工具http devices natetrue com macshift http devices natetrue com macshift 它通过适配器名称更改 Mac 地址 这是源代码 con
  • 将 numpy.matrix 转换为 C 双指针的正确方法

    获取 numpy 矩阵作为采用双指针的 C 函数的参数的规范方法是什么 Context 我在用着numpy为了验证一些 C 代码 我有一个 C 函数 它需要一个const double const 我正在使用ctypes打电话给 so来自P
  • 我应该如何根据野田时间填充 IANA/奥尔森时区列表?

    我在应用程序中使用 NodaTime 我需要用户从下拉列表中选择他们的时区 我有以下软要求 1 该列表仅包含对当前和不久的将来真实地点合理有效的选择 历史的 晦涩的和通用的时区应该被过滤掉 2 该列表应首先按 UTC 偏移量排序 然后按时区