TimeZoneInfo.FromSerializedString(String) Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Десериализует строку для повторного создания исходного сериализованного объекта TimeZoneInfo.
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
Параметры
- source
- String
Строковое представление сериализованного объекта TimeZoneInfo.
Возвращаемое значение
Исходный сериализованный объект.
Исключения
Параметр source
имеет значение Empty.
Параметр source
является пустой строкой.
Исходный параметр нельзя десериализовать обратно в объект 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 или в библиотеке ICU в Linux и macOS. Вы можете определить пользовательский часовой пояс и либо использовать ToSerializedString метод в автономном исполняемом файле, либо использовать программу установки приложения для сохранения часового пояса в виде строки. Затем приложение может извлечь эту строку из своего расположения хранилища и создать ее экземпляр с помощью FromSerializedString метода .