TimeZoneInfo.ToSerializedString 方法

定义

将当前的 TimeZoneInfo 对象转换为序列化字符串。

public:
 System::String ^ ToSerializedString();
public string ToSerializedString ();
member this.ToSerializedString : unit -> string
Public Function ToSerializedString () As String

返回

表示当前 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;
}
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

注解

依赖于通常未在 Windows 系统注册表或 Linux 和 macOScan 上的 ICU 库中 定义的时区的应用程序可以使用 CreateCustomTimeZone 方法将必要的时区实例化为 TimeZoneInfo 对象。 然后,应用程序可以调用 ToSerializedString 方法,将时区对象转换为字符串。

对象 TimeZoneInfo 还应存储在应用程序可以在需要时检索它的位置。 可能的位置包括:

  • Windows 系统上的注册表。

  • 应用程序资源文件。

  • 外部文件,例如文本文件。

适用于

另请参阅