【问题标题】:How to order a TimeZone list in .NET?如何在 .NET 中订购时区列表?
【发布时间】:2010-02-17 18:04:22
【问题描述】:

我有一个 ASP.NET Web 应用程序,它要求用户选择适当的时区,以便正确显示事件的本地时间。

在创建选择时区的简单方法时,我首先使用 TimeZoneInfo.GetSystemTimeZones() 中的值并显示该列表。

唯一的问题是,由于我们的应用程序主要针对美国,我想首先显示这些条目,基本上从东部时间开始,然后向后(西部)工作,直到我到达大西洋时间。

在代码中执行此操作的好方法是什么?

【问题讨论】:

  • 您能具体说明您希望它们的订购方式吗?比如,按字母顺序,最接近美国,或以美国为中心的时差或其他方法?
  • 我想要所有时区,从美国东部开始,一直到西部,直到我环游世界。

标签: asp.net list sorting timezone


【解决方案1】:

使用 LINQ:

var timezones = TimeZoneInfo.GetSystemTimeZones();
var orderedZones = (from t in timezones
                                where t.DisplayName.Contains("(US & Canada)")
                                select t).Concat(
                                from t in timezones 
                                where t.DisplayName.Contains("(US & Canada)") == false
                                select t
                               );

【讨论】:

  • 嗯,这比我拥有的要好得多,但它让它们乱了套——它从 UTC-08:00 到 UTC,然后到 UTC+。
  • @Nick- true,这是一个快速破解。 @reallyJim-您可以通过 UTCOffset 独立订购工会。这将按升序对组进行排序,美国区域位于顶部。
  • 真正的问题是夏威夷和阿拉斯加不是“(美国和加拿大)”的一部分,所以我必须建立一大批工会才能获得它。照这个速度,我还不如手动建个数组。
【解决方案2】:

好的,我的解决方案是:我将显示名称、ID 和我想要它们的顺序放入数据库中。它有效,因为无论如何我只是将 Id 存储在用户对象中。我将抓住它一次,并将其存储在应用程序缓存中。

Hack-y,但它“解决”了问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-02
    • 2022-12-31
    • 2017-01-26
    相关资源
    最近更新 更多