TimeZoneInfo.FindSystemTimeZoneById(String) メソッド

定義

識別子に TimeZoneInfo 基づいて オブジェクトを返します。

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

パラメーター

id
String

タイム ゾーン ID。Id プロパティの値です。

戻り値

ID が id パラメーターの値であるオブジェクト。

例外

システムに、タイム ゾーンの情報を保持するための十分なメモリがありません。

id パラメーターが null です。

指定されたタイム ゾーン ID id が見つかりませんでした。 つまり、id と同じ名前のタイム ゾーン識別子が存在していないか、または識別子は存在するものの、それにはタイム ゾーンのデータが含まれていません。

プロセスには、タイム ゾーン情報を格納するレジストリ キーからの読み取りに必要なアクセス許可がありません。

タイム ゾーン ID が見つかりましたが、レジストリ データが壊れています。

次の例では、 メソッドを FindSystemTimeZoneById 使用して東京標準タイム ゾーンを取得します。 次に、この TimeZoneInfo オブジェクトを使用して、現地時刻を東京の時刻に変換し、それが東京標準時か東京夏時間かを判断します。

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

注釈

パラメーターは id 、タイム ゾーンの識別子の長さに正確に対応する必要がありますが、一致が正常に行われるには、大文字と小文字は区別されません。つまり、タイム ゾーン識別子との比較 id では大文字と小文字は区別されません。 部分的な一致に基づいてタイム ゾーン オブジェクトを取得する場合は、 メソッドによって返されるオブジェクトの TimeZoneInfo 読み取り専用コレクションを操作するカスタム プロシージャを GetSystemTimeZones 記述できます。

Windows システムでは、 FindSystemTimeZoneById レジストリの HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Time Zones ブランチのサブキー名との照合 id を試みます。 Linux および macOS では、 ICU ライブラリで利用可能なタイム ゾーン情報が使用されます。 レジストリまたはライブラリに目的のタイム ゾーンの情報がない場合は、 メソッドのいずれかのオーバーロードを呼び出すか、 を呼び出して、必要なタイム ゾーンを表すオブジェクトを逆シリアル化TimeZoneInfoすることによってFromSerializedString、特定のCreateCustomTimeZoneタイム ゾーンを作成できます。 ただし、これらのメソッド呼び出しによって作成されたタイム ゾーンはシステム定義の時刻ではなく、 メソッドを FindSystemTimeZoneById 使用して取得することはできません。 これらのカスタム タイム ゾーンには、 メソッド呼び出しまたは FromSerializedString メソッド呼び出しによって返されるオブジェクト参照をCreateCustomTimeZone介してのみアクセスできます。

.NET 7 以前のバージョンでは、このメソッドはメソッド呼び出しごとに新しい TimeZoneInfo インスタンスを返します。 これは、同じ識別子を使用して メソッドを繰り返し呼び出す FindSystemTimeZoneById アプリケーションのパフォーマンスに影響を与える可能性があります。 (.NET 8 以降のバージョンでは、このメソッドは常にキャッシュされた TimeZoneInfo インスタンスを返します)。

適用対象

こちらもご覧ください