Leer en inglés

Compartir a través de


TimeZoneInfo.FromSerializedString(String) Método

Definición

Deserializa una cadena para volver a crear un objeto TimeZoneInfo serializado original.

C#
public static TimeZoneInfo FromSerializedString(string source);

Parámetros

source
String

Representación de cadena del objeto TimeZoneInfo serializado.

Devoluciones

Objeto serializado original.

Excepciones

El parámetro source es Empty.

El parámetro source es una cadena nula.

No se puede deserializar el parámetro de origen en un objeto TimeZoneInfo.

Ejemplos

En el ejemplo siguiente se intenta recuperar la zona horaria Antártida/Polo Sur del sistema local. Si se produce un error, el código intenta recuperar información sobre la zona horaria de un archivo de texto en el directorio de la aplicación. Si se produce un error en este intento, el código crea la zona horaria y escribe información sobre la zona horaria en el archivo de texto.

C#
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;
}

Comentarios

Hay una alternativa a proporcionar todo el código necesario para crear una zona horaria que no se encuentra en el registro en Windows o en la biblioteca de ICU en Linux y macOS. Puede definir una zona horaria personalizada y usar el ToSerializedString método en un archivo ejecutable independiente o usar el programa de instalación de una aplicación para ahorrar la zona horaria como una cadena. A continuación, la aplicación puede recuperar esta cadena de su ubicación de almacenamiento y crear una instancia de ella mediante el FromSerializedString método .

Se aplica a

Producto Versiones
.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

Consulte también