如何创建TimeZoneInfo变量数组

时间:2015-03-25 20:28:43

标签: c#

作为C#的初学者,我试图通过尽可能缩短来改进我的代码。我编写了一个Windows时区应用程序,用于定义和填充大量的TimeZoneInfo变量。问题是有近90个时区在使用,所以我目前的做法似乎很麻烦。是否可以使用数组循环来实现180行代码?

除了简洁之外,我还希望能够捕获由用户PC的注册表中未定义的特定时区引起的任何错误。必须在try catch块中包装每个TimeZoneInfo.FindSystemTimeZoneById()似乎非常笨拙,而不是正确的方法。我的想法是,循环结构可以更容易地捕获特定错误。

//Declare the TimeZoneInfo variables: 
TimeZoneInfo tziHawaii;           
TimeZoneInfo tziAlaska;          
TimeZoneInfo tziPacific;           
TimeZoneInfo tziCentral;            
....

// Populate each TimeZoneInfo variable with relevant info:
tziHawaii = TimeZoneInfo.FindSystemTimeZoneById("Hawaiian Standard Time");          
tziAlaska = TimeZoneInfo.FindSystemTimeZoneById("Alaskan Standard Time");           
tziPacific = TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time");          
tziCentral = TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time");
....

我试图创建一个循环结构来执行以上180行代码但它不起作用。我只是看不到如何创建一个名为TimeZoneInfo变量的数组,如上面的摘录(tziHawaii,tziAlaska等)。

如果有人能指出我的方式错误,我会非常高兴。

string[] arrWindowsTimeZones = new string[] { "Hawaiian Standard Time", "Alaskan Standard Time", "Pacific Standard Time", "Central Standard Time" };
TimeZoneInfo[] arrTimeZoneInfo = new TimeZoneInfo[] { DON'T KNOW WHAT TO PUT HERE} ;

for (int i = 0; i < arrWindowsTimeZones.GetUpperBound(0) + 1; i++)

{
    arrTimeZoneInfo[i] = TimeZoneInfo.FindSystemTimeZoneById(arrWindowsTimeZones[i]);
}

2 个答案:

答案 0 :(得分:0)

TimeZoneInfo.GetSystemTimeZones方法将返回有关本地系统可用信息的所有时区的已排序集合。

来自文档:

  

GetSystemTimeZones方法检索所有可用时区   来自注册表子项的信息   HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Windows NT \ CurrentVersion \ Time   区域密钥。如果它无法成功检索和解析值   对于单个TimeZoneInfo对象的特定字符串属性,   此方法将其值设置为空字符串(“”)。

答案 1 :(得分:0)

我同意TimeZoneInfo.GetSystemTimeZones()可能是你想要的,但如果你必须像你第一次问的那样手动完成,那么这就是代码:

List<string> arrWindowsTimeZones = new List<string>() { "Hawaiian Standard Time", "Alaskan Standard Time", "Pacific Standard Time", "Central Standard Time" };
List<TimeZoneInfo> arrTimeZoneInfo = new List<TimeZoneInfo>();

foreach (string zoneString in arrWindowsTimeZones)
{
    arrTimeZoneInfo.Add(TimeZoneInfo.FindSystemTimeZoneById(zoneString));
}