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

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


TimeZoneInfo.FromSerializedString(String) Метод

Определение

Десериализует строку для повторного создания исходного сериализованного объекта TimeZoneInfo.

public static TimeZoneInfo FromSerializedString(string source);

Параметры

source
String

Строковое представление сериализованного объекта TimeZoneInfo.

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

Исходный сериализованный объект.

Исключения

Параметр source имеет значение Empty.

Параметр source является пустой строкой.

Исходный параметр нельзя десериализовать обратно в объект TimeZoneInfo.

Примеры

В следующем примере пытается получить часовой пояс Антарктида/южный полюс из локальной системы. В случае сбоя код пытается получить сведения о часовом поясе из текстового файла в каталоге приложения. Если эта попытка завершается неудачно, код создает часовой пояс и записывает сведения о часовом поясе в текстовый файл.

private TimeZoneInfo InitializeTimeZone()
{
   TimeZoneInfo southPole = null;
   // Determine if South Pole time zone is defined in system
   try
   {
      southPole = TimeZoneInfo.FindSystemTimeZoneById("Antarctica/South Pole Standard Time");
   }
   // Time zone does not exist; create it, store it in a text file, and return it
   catch
   {
      const string filename = @".\TimeZoneInfo.txt";
      bool found = false;
      
      if (File.Exists(filename))
      {
         StreamReader reader = new StreamReader(filename);
         string timeZoneInfo;
         while (reader.Peek() >= 0)
         {
            timeZoneInfo = reader.ReadLine();
            if (timeZoneInfo.Contains("Antarctica/South Pole"))
            {
               southPole = TimeZoneInfo.FromSerializedString(timeZoneInfo);
               reader.Close();
               found = true;
               break;
            }   
         }
      }
      if (!found)
      {               
         // Define transition times to/from DST
         TimeZoneInfo.TransitionTime startTransition = TimeZoneInfo.TransitionTime.CreateFloatingDateRule(new DateTime(1, 1, 1, 2, 0, 0), 10, 1, DayOfWeek.Sunday); 
         TimeZoneInfo.TransitionTime endTransition = TimeZoneInfo.TransitionTime.CreateFloatingDateRule(new DateTime(1, 1, 1, 2, 0, 0), 3, 3, DayOfWeek.Sunday);
         // Define adjustment rule
         TimeSpan delta = new TimeSpan(1, 0, 0);
         TimeZoneInfo.AdjustmentRule adjustment = TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule(new DateTime(1989, 10, 1), DateTime.MaxValue.Date, delta, startTransition, endTransition);
         // Create array for adjustment rules
         TimeZoneInfo.AdjustmentRule[] adjustments = {adjustment};
         // Define other custom time zone arguments
         string displayName = "(GMT+12:00) Antarctica/South Pole";
         string standardName = "Antarctica/South Pole Standard Time";
         string daylightName = "Antarctica/South Pole Daylight Time";
         TimeSpan offset = new TimeSpan(12, 0, 0);
         southPole = TimeZoneInfo.CreateCustomTimeZone(standardName, offset, displayName, standardName, daylightName, adjustments);
         // Write time zone to the file
         StreamWriter writer = new StreamWriter(filename, true);
         writer.WriteLine(southPole.ToSerializedString());
         writer.Close();
      }
   }
   return southPole;
}

Комментарии

Существует альтернатива предоставлению всего кода, необходимого для создания часового пояса, который не найден в реестре в Windows или в библиотеке ICU в Linux и macOS. Вы можете определить пользовательский часовой пояс и либо использовать ToSerializedString метод в автономном исполняемом файле, либо использовать программу установки приложения для сохранения часового пояса в виде строки. Затем приложение может извлечь эту строку из своего расположения хранилища и создать ее экземпляр с помощью FromSerializedString метода .

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

Продукт Версии
.NET 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 2.0, 2.1

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