TimeZoneInfo.FindSystemTimeZoneById(String) Metodo
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Restituisce un TimeZoneInfo oggetto in base al relativo identificatore.
public:
static TimeZoneInfo ^ FindSystemTimeZoneById(System::String ^ id);
public static TimeZoneInfo FindSystemTimeZoneById (string id);
static member FindSystemTimeZoneById : string -> TimeZoneInfo
Public Shared Function FindSystemTimeZoneById (id As String) As TimeZoneInfo
Parametri
Restituisce
Oggetto il cui identificatore è il valore del parametro id
.
Eccezioni
Il sistema non ha memoria sufficiente per contenere le informazioni sul fuso orario.
Il valore del parametro id
è null
.
L'identificatore del fuso orario specificato da id
non è stato trovato. Questo significa che non esiste un identificatore del fuso orario il cui nome corrisponde a id
o che l'identificatore esiste ma non contiene dati sul fuso orario.
Il processo non ha le autorizzazioni necessarie per leggere dalla chiave del Registro di sistema che contiene le informazioni sul fuso orario.
L'identificatore del fuso orario è stato trovato, ma i dati del Registro di sistema sono danneggiati.
Esempio
Nell'esempio seguente viene usato il metodo per recuperare il FindSystemTimeZoneById fuso orario standard di Tokyo. Questo TimeZoneInfo oggetto viene quindi usato per convertire l'ora locale nell'ora di Tokyo e per determinare se è l'ora legale o l'ora legale di Tokyo.
using System;
public class Example
{
public static void Main()
{
// Get time in local time zone
DateTime thisTime = DateTime.Now;
Console.WriteLine("Time in {0} zone: {1}", TimeZoneInfo.Local.IsDaylightSavingTime(thisTime) ?
TimeZoneInfo.Local.DaylightName : TimeZoneInfo.Local.StandardName, thisTime);
Console.WriteLine(" UTC Time: {0}", TimeZoneInfo.ConvertTimeToUtc(thisTime, TimeZoneInfo.Local));
// Get Tokyo Standard Time zone
TimeZoneInfo tst = TimeZoneInfo.FindSystemTimeZoneById("Tokyo Standard Time");
DateTime tstTime = TimeZoneInfo.ConvertTime(thisTime, TimeZoneInfo.Local, tst);
Console.WriteLine("Time in {0} zone: {1}", tst.IsDaylightSavingTime(tstTime) ?
tst.DaylightName : tst.StandardName, tstTime);
Console.WriteLine(" UTC Time: {0}", TimeZoneInfo.ConvertTimeToUtc(tstTime, tst));
}
}
// The example displays output like the following when run on a system in the
// U.S. Pacific Standard Time zone:
// Time in Pacific Standard Time zone: 12/6/2013 10:57:51 AM
// UTC Time: 12/6/2013 6:57:51 PM
// Time in Tokyo Standard Time zone: 12/7/2013 3:57:51 AM
// UTC Time: 12/6/2013 6:57:51 PM
open System
// Get time in local time zone
let thisTime = DateTime.Now
printfn $"Time in {if TimeZoneInfo.Local.IsDaylightSavingTime thisTime then TimeZoneInfo.Local.DaylightName else TimeZoneInfo.Local.StandardName} zone: {thisTime}"
printfn $" UTC Time: {TimeZoneInfo.ConvertTimeToUtc(thisTime, TimeZoneInfo.Local)}"
// Get Tokyo Standard Time zone
let tst = TimeZoneInfo.FindSystemTimeZoneById "Tokyo Standard Time"
let tstTime = TimeZoneInfo.ConvertTime(thisTime, TimeZoneInfo.Local, tst)
printfn $"Time in {if tst.IsDaylightSavingTime tstTime then tst.DaylightName else tst.StandardName} zone: {tstTime}"
printfn $" UTC Time: {TimeZoneInfo.ConvertTimeToUtc(tstTime, tst)}"
// The example displays output like the following when run on a system in the
// U.S. Pacific Standard Time zone:
// Time in Pacific Standard Time zone: 12/6/2013 10:57:51 AM
// UTC Time: 12/6/2013 6:57:51 PM
// Time in Tokyo Standard Time zone: 12/7/2013 3:57:51 AM
// UTC Time: 12/6/2013 6:57:51 PM
Module Example
Public Sub Main()
' Get time in local time zone
Dim thisTime As Date = Date.Now
Console.WriteLine("Time in {0} zone: {1}", IIf(TimeZoneInfo.Local.IsDaylightSavingTime(thisTime),
TimeZoneInfo.Local.DaylightName, TimeZoneInfo.Local.StandardName), thisTime)
Console.WriteLine(" UTC Time: {0}", TimeZoneInfo.ConvertTimeToUtc(thisTime, TimeZoneInfo.Local))
' Get Tokyo Standard Time zone
Dim tst As TimeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById("Tokyo Standard Time")
Dim tstTime As Date = TimeZoneInfo.ConvertTime(thisTime, TimeZoneInfo.Local, tst)
Console.WriteLine("Time in {0} zone: {1}", IIf(tst.IsDaylightSavingTime(tstTime),
tst.DaylightName, tst.StandardName), tstTime)
Console.WriteLine(" UTC Time: {0}", TimeZoneInfo.ConvertTimeToUtc(tstTime, tst))
End Sub
End Module
' The example displays output like the following when run on a system in the U.S.
' Pacific Standard Time zone:
' Time in Pacific Standard Time zone: 12/6/2013 10:57:51 AM
' UTC Time: 12/6/2013 6:57:51 PM
' Time in Tokyo Standard Time zone: 12/7/2013 3:57:51 AM
' UTC Time: 12/6/2013 6:57:51 PM
Commenti
Il id
parametro deve corrispondere esattamente all'identificatore del fuso orario di lunghezza, ma non nel caso in cui si verifichi una corrispondenza corretta, ovvero il confronto tra id
gli identificatori del fuso orario è insensibile. Se si desidera recuperare gli oggetti del fuso orario in base alle corrispondenze parziali, è possibile scrivere procedure personalizzate che funzionano con la raccolta di sola lettura di TimeZoneInfo oggetti restituiti dal GetSystemTimeZones metodo .
Nei sistemi FindSystemTimeZoneById
Windows tenta di corrispondere id
ai nomi delle sottochiave del ramo HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Time Zones del Registro di sistema. In Linux e macOS vengono usate le informazioni sul fuso orario disponibili nella libreria ICU. Se il Registro di sistema o la libreria non dispone delle informazioni per il fuso orario desiderato, è possibile creare un determinato fuso orario chiamando uno degli overload del CreateCustomTimeZone metodo o chiamando FromSerializedString per deserializzare un TimeZoneInfo oggetto che rappresenta il fuso orario richiesto. Tuttavia, i fusi orari creati da queste chiamate al metodo non sono definiti dal sistema e non possono essere recuperati usando il FindSystemTimeZoneById metodo . Questi fusi orari personalizzati possono essere accessibili solo tramite il riferimento all'oggetto restituito dalla chiamata al CreateCustomTimeZone metodo o FromSerializedString .
In .NET 7 e versioni precedenti, questo metodo restituisce una nuova TimeZoneInfo istanza per ogni chiamata al metodo. Ciò potrebbe influire sulle prestazioni nelle applicazioni che chiamano ripetutamente il FindSystemTimeZoneById
metodo con lo stesso identificatore. In .NET 8 e versioni successive, questo metodo restituisce sempre un'istanza memorizzata TimeZoneInfo nella cache.