相关疑难解决方法(0)

如何在Windows和IANA时区之间进行转换?

时区标签wiki中所述,有两种不同的时区样式.

  • Microsoft提供的用于Windows和.Net TimeZoneInfo类的那些由诸如的值标识"Eastern Standard Time".

  • IANA在TZDB中提供的内容由诸如此类的值标识TimeZoneInfo.

许多基于Internet的API使用IANA时区,但由于多种原因,可能需要将其转换为Windows时区ID,反之亦然.

如何在.Net中实现这一目标?

.net c# timezone nodatime

138
推荐指数
3
解决办法
5万
查看次数

我应该如何填写Noda Time的IANA/Olson时区列表?

我在应用程序中使用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);
Run Code Online (Sandbox Code Playgroud)

timezone nodatime

16
推荐指数
1
解决办法
6466
查看次数

标签 统计

nodatime ×2

timezone ×2

.net ×1

c# ×1