TimeZoneInfo.FromSerializedString(String) Metoda
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Deserializuje ciąg w celu ponownego utworzenia oryginalnego obiektu serializowanego 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
Parametry
- source
- String
Reprezentacja ciągu obiektu serializowanego TimeZoneInfo .
Zwraca
Oryginalny serializowany obiekt.
Wyjątki
Parametr source
to Empty.
Parametr source
jest ciągiem o wartości null.
Nie można wykonać deserializacji parametru źródłowego TimeZoneInfo z powrotem do obiektu.
Przykłady
Poniższy przykład próbuje pobrać strefę czasową Antarktydy/Biegun Południowy 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 do pliku tekstowego.
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 zapewnienia całego kodu wymaganego do utworzenia strefy czasowej, która nie znajduje się w rejestrze w systemie Windows lub w bibliotece ICU w systemie 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 przy użyciu FromSerializedString metody .