Procedura: ripristinare fusi orari da una risorsa incorporataHow to: Restore time zones from an embedded resource

In questo argomento viene descritto come ripristinare i fusi orari che sono stati salvati in un file di risorse.This topic describes how to restore time zones that have been saved in a resource file. Per informazioni e istruzioni sul salvataggio di fusi orari, vedere procedura: salvare fusi orari per una risorsa incorporata.For information and instructions about saving time zones, see How to: Save time zones to an embedded resource.

Per deserializzare un oggetto TimeZoneInfo da una risorsa incorporataTo deserialize a TimeZoneInfo object from an embedded resource

  1. Se il fuso orario da recuperare non è un fuso orario personalizzato, provare a crearne un'istanza utilizzando il FindSystemTimeZoneById metodo.If the time zone to be retrieved is not a custom time zone, try to instantiate it by using the FindSystemTimeZoneById method.

  2. Creare un'istanza di un ResourceManager oggetto passando il nome completo del file di risorse incorporate e un riferimento all'assembly che contiene il file di risorse.Instantiate a ResourceManager object by passing the fully qualified name of the embedded resource file and a reference to the assembly that contains the resource file.

    Se è possibile determinare il nome completo del file di risorse incorporato, utilizzare il Ildasm.exe (Disassembler IL) per esaminare il manifesto dell'assembly.If you cannot determine the fully qualified name of the embedded resource file, use the Ildasm.exe (IL Disassembler) to examine the assembly's manifest. Un .mresource voce identifica la risorsa.An .mresource entry identifies the resource. Nell'esempio, è il nome della risorsa completo SerializeTimeZoneData.SerializedTimeZones.In the example, the resource's fully qualified name is SerializeTimeZoneData.SerializedTimeZones.

    Se il file di risorse è incorporato nello stesso assembly che contiene il codice di creazione di un'istanza del fuso orario, è possibile recuperare un riferimento a esso tramite la chiamata di static (Shared in Visual Basic) GetExecutingAssembly metodo.If the resource file is embedded in the same assembly that contains the time zone instantiation code, you can retrieve a reference to it by calling the static (Shared in Visual Basic) GetExecutingAssembly method.

  3. Se la chiamata al FindSystemTimeZoneById metodo ha esito negativo, o se deve essere creata un'istanza di un fuso orario personalizzato, recuperare una stringa che contiene il fuso orario serializzato chiamando il ResourceManager.GetString metodo.If the call to the FindSystemTimeZoneById method fails, or if a custom time zone is to be instantiated, retrieve a string that contains the serialized time zone by calling the ResourceManager.GetString method.

  4. Deserializzare i dati del fuso orario chiamando il FromSerializedString metodo.Deserialize the time zone data by calling the FromSerializedString method.

EsempioExample

Nell'esempio seguente viene deserializzato un TimeZoneInfo oggetto archiviato in un file di risorse .NET XML incorporato.The following example deserializes a TimeZoneInfo object stored in an embedded .NET XML resource file.

private void DeserializeTimeZones()
{
   TimeZoneInfo cst, palmer;
   string timeZoneString;
   ResourceManager resMgr = new ResourceManager("SerializeTimeZoneData.SerializedTimeZones", this.GetType().Assembly);

   // Attempt to retrieve time zone from system
   try
   {
      cst = TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time");
   }
   catch (TimeZoneNotFoundException)
   {
      // Time zone not in system; retrieve from resource
      timeZoneString = resMgr.GetString("CentralStandardTime");
      if (! String.IsNullOrEmpty(timeZoneString))
      {
         cst = TimeZoneInfo.FromSerializedString(timeZoneString);
      }
      else
      {
         MessageBox.Show("Unable to create Central Standard Time Zone. Application must exit.", "Application Error");
         return;
      }
   }
   // Retrieve custom time zone
   try
   {
      timeZoneString = resMgr.GetString("PalmerStandardTime");
      palmer = TimeZoneInfo.FromSerializedString(timeZoneString);
   }
   catch (MissingManifestResourceException) 
   {
      MessageBox.Show("Unable to retrieve the Palmer Standard Time Zone from the resource file. Application must exit.");
      return;
   }
}
Private Sub DeserializeTimeZones()
   Dim cst, palmer As TimeZoneInfo
   Dim timeZoneString As String
   Dim resMgr As ResourceManager = New ResourceManager("SerializeTimeZoneData.SerializedTimeZones",
                                   GetType(SerializeTimeZoneData).Assembly)

   ' Attempt to retrieve time zone from system
   Try
      cst = TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time")
   Catch ex As TimeZoneNotFoundException
      ' Time zone not in system; retrieve from resource
      timeZoneString = resMgr.GetString("CentralStandardTime")
      If Not String.IsNullOrEmpty(timeZoneString) Then
         cst = TimeZoneInfo.FromSerializedString(timeZoneString)
      Else
         MsgBox("Unable to create Central Standard Time Zone. Application must exit.")
         Exit Sub
      End If
   End Try
   ' Retrieve custom time zone
   Try
      timeZoneString = resMgr.GetString("PalmerStandardTime")
      palmer = TimeZoneInfo.FromSerializedString(timeZoneString)
   Catch ex As Exception
      MsgBox(ex.GetType().Name & ": Unable to create Palmer Standard Time Zone. Application must exit.")
      Exit Sub
   End Try
End Sub

Questo codice viene illustrata la gestione delle eccezioni per garantire che un TimeZoneInfo è presente l'oggetto richiesto dall'applicazione.This code illustrates exception handling to ensure that a TimeZoneInfo object required by the application is present. Tenta innanzitutto di creare un'istanza di un TimeZoneInfo oggetto recuperandolo dal Registro di sistema utilizzando il FindSystemTimeZoneById metodo.It first tries to instantiate a TimeZoneInfo object by retrieving it from the registry using the FindSystemTimeZoneById method. Se il fuso orario non può essere creata un'istanza, il codice recupera dal file di risorse incorporate.If the time zone cannot be instantiated, the code retrieves it from the embedded resource file.

Perché dati per i fusi orari personalizzati (fusi orari creata un'istanza utilizzando il CreateCustomTimeZone metodo) non sono archiviate nel Registro di sistema, non chiamare il codice il FindSystemTimeZoneById per creare un'istanza il fuso orario per Palmer, Antartide.Because data for custom time zones (time zones instantiated by using the CreateCustomTimeZone method) are not stored in the registry, the code does not call the FindSystemTimeZoneById to instantiate the time zone for Palmer, Antarctica. Al contrario, Cerca immediatamente il file di risorse incorporate per recuperare una stringa che contiene i dati del fuso orario prima di chiamare il FromSerializedString metodo.Instead, it immediately looks to the embedded resource file to retrieve a string that contains the time zone's data before it calls the FromSerializedString method.

Compilazione del codiceCompiling the code

L'esempio presenta i requisiti seguenti:This example requires:

  • Un riferimento a System.Core.dll e di Forms essere aggiunto al progetto.That a reference to System.Windows.Forms.dll and System.Core.dll be added to the project.

  • Che importati spazi dei nomi seguenti:That the following namespaces be imported:

    using System;
    using System.Collections;
    using System.Collections.Generic;
    using System.Globalization;
    using System.IO;
    using System.Reflection;
    using System.Resources;
    using System.Windows.Forms;
    
    Imports System.Globalization
    Imports System.IO
    Imports System.Reflection
    Imports System.Resources
    

Vedere ancheSee also

Date, ore e fusi orari Panoramica sul fuso orario procedura: salvare fusi orari per una risorsa incorporataDates, times, and time zones Time zone overview How to: Save time zones to an embedded resource