Partager via


Comment : restaurer des fuseaux horaires dans une ressource incorporée

Mise à jour : novembre 2007

Cette rubrique décrit comment restaurer des fuseaux horaires qui ont été enregistrés dans un fichier de ressources. Pour obtenir des informations et des instructions sur l'enregistrement de fuseaux horaires, consultez Comment : enregistrer des fuseaux horaires dans une ressource incorporée.

Pour désérialiser un objet TimeZoneInfo à partir d'une ressource incorporée

  1. Si le fuseau horaire à récupérer n'est pas un fuseau horaire personnalisé, essayez de l'instancier en utilisant la méthode FindSystemTimeZoneById.

  2. Instanciez un objet ResourceManager en passant le nom qualifié complet du fichier de ressources incorporées et une référence à l'assembly qui contient le fichier de ressources.

    Si vous ne pouvez pas déterminer le nom qualifié complet du fichier de ressources incorporées, utilisez le MSIL Disassembler (Ildasm.exe) pour examiner le manifeste de l'assembly. Une entrée .mresource identifie la ressource. Dans l'exemple, le nom qualifié complet de la ressource est SerializeTimeZoneData.SerializedTimeZones.

    Si le fichier de ressources est incorporé dans le même assembly qui contient le code d'instanciation du fuseau horaire, vous pouvez récupérer une référence en appelant la méthode static (Shared dans Visual Basic) GetExecutingAssembly.

  3. Si l'appel à la méthode FindSystemTimeZoneById échoue ou si un fuseau horaire personnalisé doit être instancié, récupérez une chaîne qui contient le fuseau horaire sérialisé en appelant la méthode ResourceManager.GetString.

  4. Désérialisez les données de fuseau horaire en appelant la méthode FromSerializedString.

Exemple

L'exemple suivant désérialise un objet TimeZoneInfo stocké dans un fichier de ressources .NET XML incorporé.

Private Sub DeserializeTimeZones()
   Dim cst, palmer As TimeZoneInfo
   Dim timeZoneString As String
   Dim resMgr As ResourceManager = New ResourceManager("SerializeTimeZoneData.SerializedTimeZones", Assembly.GetExecutingAssembly)

   ' 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
private void DeserializeTimeZones()
{
   TimeZoneInfo cst, palmer;
   string timeZoneString;
   ResourceManager resMgr = new ResourceManager("SerializeTimeZoneData.SerializedTimeZones", Assembly.GetExecutingAssembly());

   // 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;
   }
}

Ce code illustre la gestion des exceptions pour garantir la présence d'un objet TimeZoneInfo requis par l'application. Il essaie d'abord d'instancier un objet TimeZoneInfo en le récupérant dans le Registre à l'aide de la méthode FindSystemTimeZoneById. Si le fuseau horaire ne peut pas être instancié, le code le récupère à partir du fichier de ressources incorporées.

Comme les données des fuseaux horaires personnalisés (fuseaux horaires instanciés à l'aide de la méthode CreateCustomTimeZone) ne sont pas stockées dans le Registre, le code n'appelle pas FindSystemTimeZoneById pour instancier le fuseau horaire de Palmer, en Antarctique. À la place, il consulte immédiatement le fichier de ressources incorporées pour récupérer une chaîne qui contient les données du fuseau horaire avant d'appeler la méthode FromSerializedString.

Compilation du code

Cet exemple nécessite :

  • qu'une référence à System.Windows.Forms.dll et System.Core.dll soit ajoutée au projet.

  • que les espaces de noms suivants soient importés :

    Imports System.Globalization
    Imports System.IO
    Imports System.Reflection
    Imports System.Resources
    
    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;
    

Voir aussi

Tâches

Comment : enregistrer des fuseaux horaires dans une ressource incorporée

Concepts

Vue d'ensemble des fuseaux horaires

Autres ressources

Heures et fuseaux horaires