System.TimeZoneInfo.GetSystemTimeZones 方法
方法描述
返回时区信息在本地系统上可用的所有时区的已排序集合。
语法定义(C# System.TimeZoneInfo.GetSystemTimeZones 方法 的用法)
public static ReadOnlyCollectionGetSystemTimeZones()
参数/返回值
参数值/返回值 | 参数类型/返回类型 | 参数描述/返回描述 |
---|---|---|
返回值 | System.Collections.ObjectModel.ReadOnlyCollection |
TimeZoneInfo 对象的只读集合。 |
提示和注释
GetSystemTimeZones 方法从注册表 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Time Zones 项的子项检索所有可用的时区信息。 如果无法成功检索并分析各个 TimeZoneInfo 对象的特定字符串属性值,则此方法将这些值设置为空字符串 ("")。
重要事项
GetSystemTimeZones 方法只为在注册表中定义的时区返回 TimeZoneInfo 对象的集合, 而不包括使用 CreateCustomTimeZone 方法重载创建的时区。 只能通过由时区创建方法返回的对象引用访问这些时区。
此方法返回的集合使用当前区域性按显示名称排序。 有关显示名称的信息,请参见 DisplayName。
此方法返回的 ReadOnlyCollection
TimeZoneInfo 对象的集合表示在本地计算机上定义的时区;它不一定提供所有时区在所有期间的完整信息。 如果在本地计算机上找不到应用程序所需要的时区,则可以使用 CreateCustomTimeZone 方法重载创建自定义时区。 有关更多信息,请参见如何:创建不带调整规则的时区和如何:创建带有调整规则的时区。
您还可以通过调用 FindSystemTimeZoneById 方法并提供您要检索的时区的标识符作为参数,来确定是否在本地计算机上定义单个时区。
System.TimeZoneInfo.GetSystemTimeZones 方法例子
下面的示例检索表示时区已在计算机上定义的时区对象的集合,并将相关信息写入文本文件。
using System; using System.Globalization; using System.IO; using System.Collections.ObjectModel; public class Example { public static void Main() { const string OUTPUTFILENAME = @"C:\Temp\TimeZoneInfo.txt"; DateTimeFormatInfo dateFormats = CultureInfo.CurrentCulture.DateTimeFormat; ReadOnlyCollectiontimeZones = TimeZoneInfo.GetSystemTimeZones(); StreamWriter sw = new StreamWriter(OUTPUTFILENAME, false); foreach (TimeZoneInfo timeZone in timeZones) { bool hasDST = timeZone.SupportsDaylightSavingTime; TimeSpan offsetFromUtc = timeZone.BaseUtcOffset; TimeZoneInfo.AdjustmentRule[] adjustRules; string offsetString; sw.WriteLine("ID: {0}", timeZone.Id); sw.WriteLine(" Display Name: {0, 40}", timeZone.DisplayName); sw.WriteLine(" Standard Name: {0, 39}", timeZone.StandardName); sw.Write(" Daylight Name: {0, 39}", timeZone.DaylightName); sw.Write(hasDST ? " ***Has " : " ***Does Not Have "); sw.WriteLine("Daylight Saving Time***"); offsetString = String.Format("{0} hours, {1} minutes", offsetFromUtc.Hours, offsetFromUtc.Minutes); sw.WriteLine(" Offset from UTC: {0, 40}", offsetString); adjustRules = timeZone.GetAdjustmentRules(); sw.WriteLine(" Number of adjustment rules: {0, 26}", adjustRules.Length); if (adjustRules.Length > 0) { sw.WriteLine(" Adjustment Rules:"); foreach (TimeZoneInfo.AdjustmentRule rule in adjustRules) { TimeZoneInfo.TransitionTime transTimeStart = rule.DaylightTransitionStart; TimeZoneInfo.TransitionTime transTimeEnd = rule.DaylightTransitionEnd; sw.WriteLine(" From {0} to {1}", rule.DateStart, rule.DateEnd); sw.WriteLine(" Delta: {0}", rule.DaylightDelta); if (! transTimeStart.IsFixedDateRule) { sw.WriteLine(" Begins at {0:t} on {1} of week {2} of {3}", transTimeStart.TimeOfDay, transTimeStart.DayOfWeek, transTimeStart.Week, dateFormats.MonthNames[transTimeStart.Month - 1]); sw.WriteLine(" Ends at {0:t} on {1} of week {2} of {3}", transTimeEnd.TimeOfDay, transTimeEnd.DayOfWeek, transTimeEnd.Week, dateFormats.MonthNames[transTimeEnd.Month - 1]); } else { sw.WriteLine(" Begins at {0:t} on {1} {2}", transTimeStart.TimeOfDay, transTimeStart.Day, dateFormats.MonthNames[transTimeStart.Month - 1]); sw.WriteLine(" Ends at {0:t} on {1} {2}", transTimeEnd.TimeOfDay, transTimeEnd.Day, dateFormats.MonthNames[transTimeEnd.Month - 1]); } } } } sw.Close(); } }
异常
异常 | 异常描述 |
---|---|
OutOfMemoryException | 内存不足,无法存储所有时区信息。 |
SecurityException | 用户没有读取包含时区信息的注册表项所需的权限。 |
版本信息
.NET Framework 受以下版本支持:4、3.5 .NET Framework Client Profile 受以下版本支持:4、3.5 SP1
适用平台
Windows 7, Windows Vista SP1 或更高版本, Windows XP SP3, Windows Server 2008(不支持服务器核心), Windows Server 2008 R2(支持 SP1 或更高版本的服务器核心), Windows Server 2003 SP2 .NET Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表,请参见.NET Framework 系统要求。