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;
ReadOnlyCollection timeZones = 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 系统要求。