TimeZoneInfo.FromSerializedString(String) Metoda

Definicja

Deserializuje ciąg, aby ponownie utworzyć oryginalny serializowany TimeZoneInfo obiekt.

public:
 static TimeZoneInfo ^ FromSerializedString(System::String ^ source);
public static TimeZoneInfo FromSerializedString(string source);
static member FromSerializedString : string -> TimeZoneInfo
Public Shared Function FromSerializedString (source As String) As TimeZoneInfo

Parametry

source
String

Reprezentacja ciągu zserializowanego TimeZoneInfo obiektu.

Zwraca

Oryginalny serializowany obiekt.

Wyjątki

Parametr source jest Empty.

Parametr source jest ciągiem o wartości null.

Parametr źródłowy nie może zostać zdeserializowany z powrotem do TimeZoneInfo obiektu.

Przykłady

Poniższy przykład próbuje pobrać strefę czasową Antarktydy/bieguna południowego z systemu lokalnego. W przypadku niepowodzenia kod próbuje pobrać informacje o strefie czasowej z pliku tekstowego w katalogu aplikacji. Jeśli ta próba nie powiedzie się, kod tworzy strefę czasową i zapisuje informacje o strefie czasowej w pliku tekstowym.

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;
}
let initializeTimeZone () =
    // Determine if South Pole time zone is defined in system
    try
        TimeZoneInfo.FindSystemTimeZoneById "Antarctica/South Pole Standard Time"
    // Time zone does not exist create it, store it in a text file, and return it
    with _ ->
        let filename = @".\TimeZoneInfo.txt"
        let mutable southPole = Unchecked.defaultof<TimeZoneInfo>
        let mutable found = false
        
        if File.Exists filename then
            use reader = new StreamReader(filename)
            while reader.Peek() >= 0 && not found do
                let timeZoneInfo = reader.ReadLine()
                if timeZoneInfo.Contains "Antarctica/South Pole" then
                    southPole <- TimeZoneInfo.FromSerializedString timeZoneInfo
                    reader.Close()
                    found <- true
        if not found then
            // Define transition times to/from DST
            let startTransition = TimeZoneInfo.TransitionTime.CreateFloatingDateRule(DateTime(1, 1, 1, 2, 0, 0), 10, 1, DayOfWeek.Sunday) 
            let endTransition = TimeZoneInfo.TransitionTime.CreateFloatingDateRule(DateTime(1, 1, 1, 2, 0, 0), 3, 3, DayOfWeek.Sunday)
            // Define adjustment rule
            let delta = TimeSpan(1, 0, 0)
            let adjustment = TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule(DateTime(1989, 10, 1), DateTime.MaxValue.Date, delta, startTransition, endTransition)
            // Create array for adjustment rules
            let adjustments = [| adjustment |]
            // Define other custom time zone arguments
            let displayName = "(GMT+12:00) Antarctica/South Pole"
            let standardName = "Antarctica/South Pole Standard Time"
            let daylightName = "Antarctica/South Pole Daylight Time"
            let offset = TimeSpan(12, 0, 0)
            southPole <- TimeZoneInfo.CreateCustomTimeZone(standardName, offset, displayName, standardName, daylightName, adjustments)
            // Write time zone to the file
            use writer = new StreamWriter(filename, true)
            writer.WriteLine(southPole.ToSerializedString())
        southPole
Private Function InitializeTimeZone() As TimeZoneInfo
   Dim southPole As TimeZoneInfo = Nothing
   ' 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 e As TimeZoneNotFoundException
      Dim found As Boolean
      Const filename As String = ".\TimeZoneInfo.txt"
      
      If File.Exists(filename) Then
         Dim reader As StreamReader = New StreamReader(fileName)
         Dim timeZoneString As String
         Do While reader.Peek() >= 0
            timeZoneString = reader.ReadLine()
            If timeZoneString.Contains("Antarctica/South Pole") Then
               southPole = TimeZoneInfo.FromSerializedString(timeZoneString)
               reader.Close()
               found = True
               Exit Do
            End If   
         Loop
      End If
      If Not found Then               
         ' Define transition times to/from DST
         Dim startTransition As TimeZoneInfo.TransitionTime = TimeZoneInfo.TransitionTime.CreateFloatingDateRule(#02:00:00#, 10, 1, DayOfWeek.Sunday) 
         Dim endTransition As TimeZoneInfo.TransitionTime = TimeZoneInfo.TransitionTime.CreateFloatingDateRule(#02:00:00#, 3, 3, DayOfWeek.Sunday)
         ' Define adjustment rule
         Dim delta As TimeSpan = New TimeSpan(1, 0, 0)
         Dim adjustment As TimeZoneInfo.AdjustmentRule = TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule(#10/01/1989#, Date.MaxValue.Date, delta, startTransition, endTransition)
         ' Create array for adjustment rules
         Dim adjustments() As TimeZoneInfo.AdjustmentRule = {adjustment}
         ' Define other custom time zone arguments
         Dim displayName As String = "(GMT+12:00) Antarctica/South Pole"
         Dim standardName As String = "Antarctica/South Pole Standard Time"
         Dim daylightName As String = "Antarctica/South Pole Daylight Time"
         Dim offset As TimeSpan = New TimeSpan(12, 0, 0)
         southPole = TimeZoneInfo.CreateCustomTimeZone(standardName, offset, displayName, standardName, daylightName, adjustments)
         ' Write time zone to the file
         Dim writer As StreamWriter = New StreamWriter(filename, True)
         writer.WriteLine(southPole.ToSerializedString())
         writer.Close()
      End If
   End Try
   Return southPole
End Function

Uwagi

Istnieje alternatywa dla podania całego kodu wymaganego do utworzenia strefy czasowej, która nie znajduje się w rejestrze w Windows lub w bibliotece ICU Library w systemach Linux i macOS. Możesz zdefiniować niestandardową strefę czasową i użyć metody w autonomicznym pliku wykonywalnym lub użyć ToSerializedString programu instalacyjnego aplikacji, aby zapisać strefę czasową jako ciąg. Następnie aplikacja może pobrać ten ciąg z lokalizacji magazynu i utworzyć wystąpienie go przy użyciu FromSerializedString metody .

Dotyczy

Zobacz też