字符串是.Net中的有效时区

本文关键字:有效 时区 Net 字符串 | 更新日期: 2023-09-27 18:27:21

我收到一个字符串作为json参数,它应该是一个时区ID。我想检查一下。

这就是我所拥有的:

TheTimezoneID = TheTimezoneID.Trim();
var AllTimezones = TimeZoneInfo.GetSystemTimeZones();
if (TheTimezoneID "is a valid .net timezone" == true) {}

测试TheTimezoneID是否在AllTimezones中的linq表达式是什么?我试过使用.Any,但它不起作用。

谢谢。

字符串是.Net中的有效时区

如果要在各种情况下执行此操作,您可能应该使用:

private static readonly HashSet<string> AllTimeZoneIds = 
    new HashSet<string>(TimeZoneInfo.GetSystemTimeZones()
                                    .Select(tz => tz.Id));

然后你可以使用:

if (AllTimeZoneIds.Contains(timeZoneId))

当哈希集可以执行O(1)查找时,不需要每次使用LINQ来迭代整个时区列表。

如果你只是对使用Any感到好奇,那就是:

if (AllTimeZoneIds.Select(tz => tz.Id).Contains(timeZoneid))

if (AllTimeZoneIds.Any(tz => tz.Id == timeZoneid))

请注意,"时区ID"是一个相当模糊的概念。这将检查它是否是有效的.NET时区ID。如果你真的得到了像"欧洲/伦敦"这样的时区,那就另当别论了。