TimeZoneInfo.GetSystemTimeZones Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Перегрузки
GetSystemTimeZones() |
Возвращает отсортированную коллекцию всех часовых поясов, сведения о которых доступны в локальной системе. |
GetSystemTimeZones(Boolean) |
Возвращает объект , ReadOnlyCollection<T> содержащий все допустимые часовые пояса с локального компьютера. Этот метод не вызывает исключение TimeZoneNotFoundException или InvalidTimeZoneException. |
GetSystemTimeZones()
- Исходный код:
- TimeZoneInfo.cs
- Исходный код:
- TimeZoneInfo.cs
- Исходный код:
- TimeZoneInfo.cs
Возвращает отсортированную коллекцию всех часовых поясов, сведения о которых доступны в локальной системе.
public:
static System::Collections::ObjectModel::ReadOnlyCollection<TimeZoneInfo ^> ^ GetSystemTimeZones();
public static System.Collections.ObjectModel.ReadOnlyCollection<TimeZoneInfo> GetSystemTimeZones ();
[System.Security.SecurityCritical]
[System.Security.SecurityTreatAsSafe]
public static System.Collections.ObjectModel.ReadOnlyCollection<TimeZoneInfo> GetSystemTimeZones ();
static member GetSystemTimeZones : unit -> System.Collections.ObjectModel.ReadOnlyCollection<TimeZoneInfo>
[<System.Security.SecurityCritical>]
[<System.Security.SecurityTreatAsSafe>]
static member GetSystemTimeZones : unit -> System.Collections.ObjectModel.ReadOnlyCollection<TimeZoneInfo>
Public Shared Function GetSystemTimeZones () As ReadOnlyCollection(Of TimeZoneInfo)
Возвращаемое значение
Доступная только для чтения коллекция объектов TimeZoneInfo.
- Атрибуты
Исключения
Недостаточно памяти для хранения всех сведений о часовом поясе.
Пользователь не имеет разрешений на чтение из разделов реестра, которые содержат сведения о часовом поясе.
Примеры
В следующем примере извлекается коллекция объектов часовых поясов, представляющих часовые пояса, определенные на компьютере, и записывается информация о них в текстовый файл.
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<TimeZoneInfo> 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();
}
}
open System
open System.Globalization
open System.IO
open System.Collections.ObjectModel
[<EntryPoint>]
let main _ =
let OUTPUTFILENAME = @"C:\Temp\TimeZoneInfo.txt"
let dateFormats = CultureInfo.CurrentCulture.DateTimeFormat
let timeZones = TimeZoneInfo.GetSystemTimeZones()
use sw = new StreamWriter(OUTPUTFILENAME, false)
for timeZone in timeZones do
let hasDST = timeZone.SupportsDaylightSavingTime
let offsetFromUtc = timeZone.BaseUtcOffset
sw.WriteLine $"ID: {timeZone.Id}"
sw.WriteLine $" Display Name: {timeZone.DisplayName, 40}"
sw.WriteLine $" Standard Name: {timeZone.StandardName, 39}"
sw.Write $" Daylight Name: {timeZone.DaylightName, 39}"
sw.Write(if hasDST then " ***Has " else " ***Does Not Have ")
sw.WriteLine "Daylight Saving Time***"
let offsetString = $"{offsetFromUtc.Hours} hours, {offsetFromUtc.Minutes} minutes"
sw.WriteLine $" Offset from UTC: {offsetString, 40}"
let adjustRules = timeZone.GetAdjustmentRules()
sw.WriteLine $" Number of adjustment rules: {adjustRules.Length, 26}"
if adjustRules.Length > 0 then
sw.WriteLine " Adjustment Rules:"
for rule in adjustRules do
let transTimeStart = rule.DaylightTransitionStart
let transTimeEnd = rule.DaylightTransitionEnd
sw.WriteLine $" From {rule.DateStart} to {rule.DateEnd}"
sw.WriteLine $" Delta: {rule.DaylightDelta}"
if not transTimeStart.IsFixedDateRule then
sw.WriteLine $" Begins at {transTimeStart.TimeOfDay:t} on {transTimeStart.DayOfWeek} of week {transTimeStart.Week} of {dateFormats.MonthNames[transTimeStart.Month - 1]}"
sw.WriteLine $" Ends at {transTimeEnd.TimeOfDay:t} on {transTimeEnd.DayOfWeek} of week {transTimeEnd.Week} of {dateFormats.MonthNames[transTimeEnd.Month - 1]}"
else
sw.WriteLine $" Begins at {transTimeStart.TimeOfDay:t} on {transTimeStart.Day} {dateFormats.MonthNames[transTimeStart.Month - 1]}"
sw.WriteLine $" Ends at {transTimeEnd.TimeOfDay:t} on {transTimeEnd.Day} {dateFormats.MonthNames[transTimeEnd.Month - 1]}"
0
Imports System.Collections.ObjectModel
Imports System.Globalization
Imports System.IO
Module Example
Public Sub Main()
Const OUTPUTFILENAME As String = "C:\Temp\TimeZoneInfo.txt"
Dim timeZones As ReadOnlyCollection(Of TimeZoneInfo) = TimeZoneInfo.GetSystemTimeZones()
Dim sw As StreamWriter = New StreamWriter(OUTPUTFILENAME, False)
For Each timeZone As TimeZoneInfo in timeZones
Dim hasDST As Boolean = timeZone.SupportsDaylightSavingTime
Dim offsetFromUtc As TimeSpan = timeZone.BaseUtcOffset
Dim adjustRules() As System.TimeZoneInfo.AdjustmentRule
Dim offsetString As String
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(iif(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 Then
sw.WriteLine(" Adjustment Rules:")
For Each rule As TimeZoneInfo.AdjustmentRule In adjustRules
Dim transTimeStart As TimeZoneInfo.TransitionTime = rule.DaylightTransitionStart
Dim transTimeEnd As TimeZoneInfo.TransitionTime = rule.DaylightTransitionEnd
sw.WriteLine(" From {0} to {1}", rule.DateStart, rule.DateEnd)
sw.WriteLine(" Delta: {0}", rule.DaylightDelta)
If Not transTimeStart.IsFixedDateRule
sw.WriteLine(" Begins at {0:t} on {1} of week {2} of {3}", transTimeStart.TimeOfDay, _
transTimeStart.DayOfWeek, _
transTimeStart.Week, _
MonthName(transTimeStart.Month))
sw.WriteLine(" Ends at {0:t} on {1} of week {2} of {3}", transTimeEnd.TimeOfDay, _
transTimeEnd.DayOfWeek, _
transTimeEnd.Week, _
MonthName(transTimeEnd.Month))
Else
sw.WriteLine(" Begins at {0:t} on {1} {2}", transTimeStart.TimeOfDay, _
transTimeStart.Day, _
MonthName(transTimeStart.Month))
sw.WriteLine(" Ends at {0:t} on {1} {2}", transTimeEnd.TimeOfDay, _
transTimeEnd.Day, _
MonthName(transTimeEnd.Month))
End If
Next
End If
Next
sw.Close()
# Get timezone/date details and open a stream writer
$DateFormats = [System.Globalization.CultureInfo]::CurrentCulture.DateTimeFormat
$TimeZones = [System.TimeZoneInfo]::GetSystemTimeZones()
$OutputFileName = 'C:\Temp\TimeZoneInfo.txt'
$Sw = New-Object -TypeName System.IO.StreamWriter -ArgumentList $OutputFileName,$false
# Write overview information
$Sw.WriteLine('{0} Time zones on this system' -f $TimeZones.Count)
# Process each timezone on the system
# Write details to the streamwriter
foreach ($TimeZone in $TimeZones) {
$HasDST = $TimeZone.SupportsDaylightSavingTime
$OffsetFromUtc = $TimeZone.BaseUtcOffset
$Sw.WriteLine("ID: {0}" -f $TimeZone.Id)
$Sw.WriteLine(" Display Name: {0}" -f $TimeZone.DisplayName)
$Sw.WriteLine(" Standard Name: {0}" -f $TimeZone.StandardName)
$Sw.Write(" Daylight Name: {0}" -f $TimeZone.DaylightName)
$Sw.Write( $(If ($HasDST) {" ***Has: "} Else {" ***Does Not Have: "}))
$Sw.WriteLine("Daylight Saving Time***")
$OffsetString = "{0} hours, {1} minutes" -f $OffsetFromUtc.Hours, $OffsetFromUtc.Minutes
$Sw.WriteLine(" Offset from UTC: {0}" -f $offsetString)
$AdjustRules = $timeZone.GetAdjustmentRules()
$Sw.WriteLine(" Number of adjustment rules: {0}" -f $adjustRules.Count)
If ($AdjustRules.Count -gt 0)
{
$Sw.WriteLine(" Adjustment Rules:")
foreach ($Rule in $AdjustRules)
{
$TransTimeStart = $Rule.DaylightTransitionStart
$TransTimeEnd = $Rule.DaylightTransitionEnd
$Sw.WriteLine((" From {0} to {1}" -f $Rule.DateStart, $Rule.DateEnd))
$Sw.WriteLine((" Delta: {0}" -f $Rule.DaylightDelta))
if (-Not $TransTimeStart.IsFixedDateRule)
{
$Sw.WriteLine((" Begins at {0:t} on {1} of week {2} of {3}" -f $TransTimeStart.TimeOfDay,
$TransTimeStart.DayOfWeek,
$TransTimeStart.Week,
$DateFormats.MonthNames[$TransTimeStart.Month - 1]))
$Sw.WriteLine((" Ends at {0:t} on {1} of week {2} of {3}" -f $TransTimeEnd.TimeOfDay,
$TransTimeEnd.DayOfWeek,
$TransTimeEnd.Week,
$DateFormats.MonthNames[[int] $TransTimeEnd.Month - 1]))
}
else
{
$Sw.WriteLine((" Begins at {0:t} on {1} {2}" -f $TransTimeStart.TimeOfDay,
$TransTimeStart.Day,
$DateFormats.MonthNames[$transTimeStart.Month - 1]))
$Sw.WriteLine((" Ends at {0:t} on {1} {2}" -f $TransTimeEnd.TimeOfDay,
$TransTimeEnd.Day,
$DateFormats.MonthNames[$transTimeEnd.Month - 1]))
}
} # End of processing each adjustment rule
} # End of checking adjustment rules
} # End of processing Time Zones
# Close stream writer then display output in notepad
$Sw.Close()
# Output of 1st three time zones:
# 135 Time zones on this system
# ID: Dateline Standard Time
# Display Name: (UTC-12:00) International Date Line West
# Standard Name: Dateline Standard Time
# Daylight Name: Dateline Summer Time ***Does Not Have: Daylight Saving Time***
# Offset from UTC: -12 hours, 0 minutes
# Number of adjustment rules: 0
# ID: UTC-11
# Display Name: (UTC-11:00) Co-ordinated Universal Time-11
# Standard Name: UTC-11
# Daylight Name: UTC-11 ***Does Not Have: Daylight Saving Time***
# Offset from UTC: -11 hours, 0 minutes
# Number of adjustment rules: 0
# ID: Aleutian Standard Time
# Display Name: (UTC-10:00) Aleutian Islands
# Standard Name: Aleutian Standard Time
# Daylight Name: Aleutian Summer Time ***Has: Daylight Saving Time***
# Offset from UTC: -10 hours, 0 minutes
# Number of adjustment rules: 2
# Adjustment Rules:
# From 01/01/0001 00:00:00 to 31/12/2006 00:00:00
# Delta: 01:00:00
# Begins at 02:00 on Sunday of week 1 of April
# Ends at 02:00 on Sunday of week 5 of October
# From 01/01/2007 00:00:00 to 31/12/9999 00:00:00
# Delta: 01:00:00
# Begins at 02:00 on Sunday of week 2 of March
# Ends at 02:00 on Sunday of week 1 of November
Комментарии
Метод GetSystemTimeZones извлекает все доступные сведения о часовом поясе из подразделов раздела HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Time Zones реестра в системах Windows и из библиотеки ICU в Linux и macOS. Если не удается успешно получить и проанализировать значения для определенных строковых свойств отдельных TimeZoneInfo объектов, этот метод устанавливает для него значение пустой строки ("").
Важно!
Метод GetSystemTimeZones возвращает коллекцию объектов только для часовых поясов TimeZoneInfo , определенных в реестре Windows или библиотеке ICU. Он не включает часовые пояса, созданные с помощью перегрузок CreateCustomTimeZone метода . Они доступны только через ссылку на объект, возвращенную методом создания часового пояса.
Коллекция, возвращаемая этим методом, сортируется по смещению в формате UTC, а для часовых поясов с таким же смещением в формате UTC — по отображаемой имени с использованием текущего языка и региональных параметров. Сведения о отображаемом имени см. в разделе DisplayName.
Объект ReadOnlyCollection<T> , возвращаемый этим методом, поддерживает IEnumerable<T> интерфейс , что означает, что его можно выполнить итерации с помощью инструкций foreach
(в C#) или For Each…Next
(в Visual Basic). Каждая итерация цикла предоставляет следующий TimeZoneInfo объект в коллекции.
Коллекция TimeZoneInfo объектов представляет часовые пояса, определенные на локальном компьютере; она не обязательно предоставляет полную информацию для всех часовых поясов за все периоды времени. Если приложению требуются часовые пояса, которые не найдены на локальном компьютере, можно создать настраиваемые часовые пояса с помощью перегрузок CreateCustomTimeZone метода . Дополнительные сведения см. в разделах Практическое руководство. Создание часовых поясов без правил корректировки и Практическое руководство. Создание часовых поясов с помощью правил корректировки.
Вы также можете определить, определен ли отдельный часовой пояс на локальном компьютере, вызвав FindSystemTimeZoneById метод и указав идентификатор часового пояса, который требуется извлечь в качестве параметра.
Применяется к
GetSystemTimeZones(Boolean)
- Исходный код:
- TimeZoneInfo.cs
- Исходный код:
- TimeZoneInfo.cs
Возвращает объект , ReadOnlyCollection<T> содержащий все допустимые часовые пояса с локального компьютера. Этот метод не вызывает исключение TimeZoneNotFoundException или InvalidTimeZoneException.
public:
static System::Collections::ObjectModel::ReadOnlyCollection<TimeZoneInfo ^> ^ GetSystemTimeZones(bool skipSorting);
public static System.Collections.ObjectModel.ReadOnlyCollection<TimeZoneInfo> GetSystemTimeZones (bool skipSorting);
static member GetSystemTimeZones : bool -> System.Collections.ObjectModel.ReadOnlyCollection<TimeZoneInfo>
Public Shared Function GetSystemTimeZones (skipSorting As Boolean) As ReadOnlyCollection(Of TimeZoneInfo)
Параметры
- skipSorting
- Boolean
Если true
задано значение , возвращаемая коллекция не обязательно будет отсортирована.
Возвращаемое значение
Комментарии
Задав для параметра skipSorting значение true
, метод попытается избежать сортировки возвращаемой коллекции. Этот вариант может быть полезен, если вызывающей объекту не требуется отсортированный список и направлен на повышение производительности.