方法: あいまいな時刻を解決するにはHow to: Resolve ambiguous times

あいまいな時刻とは、複数の世界協定時刻 (UTC) にマップされる時刻です。An ambiguous time is a time that maps to more than one Coordinated Universal Time (UTC). これは、あるタイム ゾーンの夏時間から標準時間に移行する際など、時計の時刻を前に戻すときに発生します。It occurs when the clock time is adjusted back in time, such as during the transition from a time zone's daylight saving time to its standard time. あいまいな時刻を処理する場合は、次のいずれかの操作を行います。When handling an ambiguous time, you can do one of the following:

  • 時刻が UTC にどのようにマップされるかを想定します。Make an assumption about how the time maps to UTC. たとえば、あいまいな時刻は常にタイム ゾーンの標準時刻で表されると想定できます。For example, you can assume that an ambiguous time is always expressed in the time zone's standard time.

  • あいまいな時刻が、ユーザーによって入力されたデータ項目である場合は、あいまいさの解決をユーザーに任せることができます。If the ambiguous time is an item of data entered by the user, you can leave it to the user to resolve the ambiguity.

このトピックでは、タイム ゾーンの標準時を表すと仮定すると、あいまいな時刻を解決する方法を示します。This topic shows how to resolve an ambiguous time by assuming that it represents the time zone's standard time.

あいまいな時刻をタイム ゾーンの標準時刻にマップするにはTo map an ambiguous time to a time zone's standard time

  1. 呼び出す、IsAmbiguousTime時刻があいまいかどうかを調べます。Call the IsAmbiguousTime method to determine whether the time is ambiguous.

  2. 時刻があいまいな場合は、減算、時刻から、TimeSpanタイム ゾーンのによって返されるオブジェクトBaseUtcOffsetプロパティです。If the time is ambiguous, subtract the time from the TimeSpan object returned by the time zone's BaseUtcOffset property.

  3. 呼び出す、 static (Shared Visual Basic .NET で)SpecifyKind値を設定する (utc) 日付と時刻のメソッドKindプロパティをDateTimeKind.Utcです。Call the static (Shared in Visual Basic .NET) SpecifyKind method to set the UTC date and time value's Kind property to DateTimeKind.Utc.

Example

次の例では、ローカル タイム ゾーンの標準時刻を表すと仮定すると、あいまいな時刻を UTC に変換する方法を示します。The following example illustrates how to convert an ambiguous time to UTC by assuming that it represents the local time zone's standard time.

private DateTime ResolveAmbiguousTime(DateTime ambiguousTime)
{
   // Time is not ambiguous
   if (! TimeZoneInfo.Local.IsAmbiguousTime(ambiguousTime))
   { 
      return ambiguousTime; 
   }
   // Time is ambiguous
   else
   {
      DateTime utcTime = DateTime.SpecifyKind(ambiguousTime - TimeZoneInfo.Local.BaseUtcOffset, 
                                              DateTimeKind.Utc);      
      Console.WriteLine("{0} local time corresponds to {1} {2}.", 
                        ambiguousTime, utcTime, utcTime.Kind.ToString());
      return utcTime;            
   }   
}
Private Function ResolveAmbiguousTime(ambiguousTime As Date) As Date
   ' Time is not ambiguous
   If Not TimeZoneInfo.Local.IsAmbiguousTime(ambiguousTime) Then 
      Return TimeZoneInfo.ConvertTimeToUtc(ambiguousTime) 
   ' Time is ambiguous
   Else
      Dim utcTime As Date = DateTime.SpecifyKind(ambiguousTime - TimeZoneInfo.Local.BaseUtcOffset, DateTimeKind.Utc)      
      Console.WriteLine("{0} local time corresponds to {1} {2}.", ambiguousTime, utcTime, utcTime.Kind.ToString())
      Return utcTime            
   End If   
End Function

例では、という名前のメソッドから成るResolveAmbiguousTimeを決定するかどうか、DateTimeに渡された値があいまいです。The example consists of a method named ResolveAmbiguousTime that determines whether the DateTime value passed to it is ambiguous. 値があいまいなメソッドを返します、DateTimeを対応する UTC 時刻を表す値です。If the value is ambiguous, the method returns a DateTime value that represents the corresponding UTC time. このメソッドでは、この変換を処理のローカル タイム ゾーンの値を減算してBaseUtcOffset現地時刻からのプロパティです。The method handles this conversion by subtracting the value of the local time zone's BaseUtcOffset property from the local time.

あいまいな時刻を呼び出すことによって処理される通常は、GetAmbiguousTimeOffsetsの配列を取得する方法をTimeSpanあいまいな時刻の可能な UTC を格納するオブジェクトをオフセットします。Ordinarily, an ambiguous time is handled by calling the GetAmbiguousTimeOffsets method to retrieve an array of TimeSpan objects that contain the ambiguous time's possible UTC offsets. しかし、この例は、あいまいな時刻は常にタイム ゾーンの標準時刻にマップされるという想定に基づいています。However, this example makes the arbitrary assumption that an ambiguous time should always be mapped to the time zone's standard time. BaseUtcOffsetプロパティは、UTC とタイム ゾーンの標準時刻のオフセットを返します。The BaseUtcOffset property returns the offset between UTC and a time zone's standard time.

この例では、ローカル タイム ゾーンへのすべての参照はを通じて行われます、TimeZoneInfo.Localプロパティ以外のローカル時刻ゾーンをオブジェクト変数に割り当てることはありません。In this example, all references to the local time zone are made through the TimeZoneInfo.Local property; the local time zone is never assigned to an object variable. これは、ためにの推奨される方法への呼び出し、TimeZoneInfo.ClearCachedDataメソッドには、ローカル タイム ゾーンに割り当てられているすべてのオブジェクトが無効にします。This is a recommended practice because a call to the TimeZoneInfo.ClearCachedData method invalidates any objects that the local time zone is assigned to.

コードのコンパイルCompiling the code

この例で必要な要素は次のとおりです。This example requires:

  • される System.Core.dll への参照をプロジェクトに追加します。That a reference to System.Core.dll be added to the project.

  • Systemと共に名前空間をインポートする、usingステートメント (c# コードで必要です)。That the System namespace be imported with the using statement (required in C# code).

関連項目See also

日付、時刻、およびタイム ゾーン する方法: あいまいな時刻を解決することができますDates, times, and time zones How to: Let users resolve ambiguous times