Прочитать на английском

Поделиться через


TimeZoneInfo.FindSystemTimeZoneById(String) Метод

Определение

Возвращает объект на TimeZoneInfo основе его идентификатора.

C#
public static TimeZoneInfo FindSystemTimeZoneById(string id);

Параметры

id
String

Идентификатор часового пояса, соответствующий свойству Id.

Возвращаемое значение

Объект, идентификатор которого равен значению параметра id.

Исключения

В системе недостаточно памяти для хранения сведений о часовом поясе.

Параметр id имеет значение null.

Идентификатор часового пояса, указанный id, не найден. Это означает, что идентификатор часового пояса, имя которого соответствует id, не существует, или что идентификатор существует, но не содержит данных о часовом поясе.

Процесс не имеет разрешений, необходимых для чтения из раздела реестра, который содержит сведения о часовом поясе.

Идентификатор часового пояса найден, однако данные реестра повреждены.

Примеры

В следующем примере метод используется FindSystemTimeZoneById для получения стандартного часового пояса Токио. Затем этот TimeZoneInfo объект используется для преобразования местного времени в время в Токио и определения того, является ли оно токийское стандартное время или время (лето).

C#
using System;

public class Example
{
   public static void Main()
   {
      // Get time in local time zone 
      DateTime thisTime = DateTime.Now;
      Console.WriteLine("Time in {0} zone: {1}", TimeZoneInfo.Local.IsDaylightSavingTime(thisTime) ?
                        TimeZoneInfo.Local.DaylightName : TimeZoneInfo.Local.StandardName, thisTime);
      Console.WriteLine("   UTC Time: {0}", TimeZoneInfo.ConvertTimeToUtc(thisTime, TimeZoneInfo.Local));
      // Get Tokyo Standard Time zone
      TimeZoneInfo tst = TimeZoneInfo.FindSystemTimeZoneById("Tokyo Standard Time");
      DateTime tstTime = TimeZoneInfo.ConvertTime(thisTime, TimeZoneInfo.Local, tst);      
      Console.WriteLine("Time in {0} zone: {1}", tst.IsDaylightSavingTime(tstTime) ?
                        tst.DaylightName : tst.StandardName, tstTime);
      Console.WriteLine("   UTC Time: {0}", TimeZoneInfo.ConvertTimeToUtc(tstTime, tst));
   }
}
// The example displays output like the following when run on a system in the
// U.S. Pacific Standard Time zone:
//       Time in Pacific Standard Time zone: 12/6/2013 10:57:51 AM
//          UTC Time: 12/6/2013 6:57:51 PM
//       Time in Tokyo Standard Time zone: 12/7/2013 3:57:51 AM
//          UTC Time: 12/6/2013 6:57:51 PM

Комментарии

Параметр id должен точно соответствовать идентификатору часового пояса по длине, но не в случае успешного id совпадения. То есть сравнение с идентификаторами часовых поясов не учитывает регистр. Если вы хотите получить объекты часового пояса на основе частичных совпадений, можно написать пользовательские процедуры, которые работают с доступной только для чтения коллекцией TimeZoneInfo объектов, возвращаемых методом GetSystemTimeZones .

В системах FindSystemTimeZoneById Windows пытается сопоставить id имена подразделов HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Time Zones ветви реестра. В Linux и macOS используется информация о часовом поясе, доступная в библиотеке ICU. Если в реестре или библиотеке нет сведений о нужном часовом поясе, можно создать определенный часовой пояс, вызвав одну из перегрузок CreateCustomTimeZone метода или вызвав для FromSerializedString десериализации TimeZoneInfo объекта, представляющего требуемый часовой пояс. Однако часовые пояса, созданные этими вызовами метода, не являются системным временем и не могут быть получены с помощью FindSystemTimeZoneById метода . Доступ к этим пользовательским часовых поясам можно получить только через ссылку на объект, возвращенную вызовом CreateCustomTimeZone метода или FromSerializedString .

В .NET 7 и более ранних версиях этот метод возвращает новый TimeZoneInfo экземпляр для каждого вызова метода. Это может повлиять на производительность приложений, которые многократно вызывают FindSystemTimeZoneById метод с тем же идентификатором. (В .NET 8 и более поздних версиях этот метод всегда возвращает кэшированный TimeZoneInfo экземпляр.)

Применяется к

Продукт Версии
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

См. также раздел