タイム ゾーン間での時刻の変換Converting times between time zones

日時を使用するすべてのアプリケーションで、タイム ゾーン間の違いを処理することの重要性が高まっています。It is becoming increasingly important for any application that works with dates and times to handle differences between time zones. アプリケーション不要になったと仮定するすべての時刻で表現できるローカル時刻は、時間がから利用可能なDateTime構造体。An application can no longer assume that all times can be expressed in the local time, which is the time available from the DateTime structure. たとえば、米国東部の現在の時刻を表示する Web ページには、東アジアの顧客に対する信頼性を欠いています。For example, a Web page that displays the current time in the eastern part of the United States will lack credibility to a customer in eastern Asia. このトピックは、時間を別の 1 つのタイム ゾーンに変換する方法と、変換する方法について説明します。DateTimeOffsetタイム ゾーンに対応が限られている値。This topic explains how to convert times from one time zone to another, as well as how to convert DateTimeOffset values that have limited time zone awareness.

世界協定時刻への変換Converting to Coordinated Universal Time

世界協定時刻 (UTC) は、高精度の原子時標準です。Coordinated Universal Time (UTC) is a high-precision, atomic time standard. 世界のタイム ゾーンは、UTC からの正または負のオフセットとして表現されます。The world’s time zones are expressed as positive or negative offsets from UTC. したがって、UTC はタイム ゾーンの影響を受けない、またはタイム ゾーンに依存しない種類の時刻を提供します。Thus, UTC provides a kind of time-zone free or time-zone neutral time. コンピューター間の日時の移植性が重要となる場合には、UTC 時刻の使用が推奨されます。The use of UTC time is recommended when a date and time's portability across computers is important. (詳細および日付と時刻を使用して他のベスト プラクティスでは、次を参照してください.NET Framework の DateTime を使用したベスト プラクティスのコーディング。)。個別のタイム ゾーンを UTC に変換すると、時間の比較が容易になります。(For details and other best practices using dates and times, see Coding best practices using DateTime in the .NET Framework.) Converting individual time zones to UTC makes time comparisons easy.

注意

シリアル化することも、DateTimeOffset時間で明確に単一のポイントを表す構造体。You can also serialize a DateTimeOffset structure to unambiguously represent a single point in time. DateTimeOffsetオブジェクト値を格納します日付と時刻 (utc) からのオフセットと共に、常に特定の時点の間のリレーションシップに対してな UTC です。Because DateTimeOffset objects store a date and time value along with its offset from UTC, they always represent a particular point in time in relationship to UTC.

呼び出して、時刻を UTC に変換する最も簡単な方法は、 static (Shared Visual Basic で)TimeZoneInfo.ConvertTimeToUtc(DateTime)メソッドです。The easiest way to convert a time to UTC is to call the static (Shared in Visual Basic) TimeZoneInfo.ConvertTimeToUtc(DateTime) method. メソッドによって実行される正確な変換は、の値によって異なります、dateTimeパラメーターのKindプロパティは、次の表に示すようです。The exact conversion performed by the method depends on the value of the dateTime parameter's Kind property, as the following table shows.

DateTime.Kind 変換Conversion
DateTimeKind.Local 現地時刻を UTC に変換します。Converts local time to UTC.
DateTimeKind.Unspecified dateTime パラメーターが現地時刻であることを前提とし、現地時刻を UTC に変換します。Assumes the dateTime parameter is local time and converts local time to UTC.
DateTimeKind.Utc dateTime パラメーターを変更せずに返します。Returns the dateTime parameter unchanged.

次のコードは、現在の現地時刻を UTC に変換し、コンソールに結果を表示します。The following code converts the current local time to UTC and displays the result to the console.

DateTime dateNow = DateTime.Now;
Console.WriteLine("The date and time are {0} UTC.", 
                   TimeZoneInfo.ConvertTimeToUtc(dateNow));
Dim dateNow As Date = Date.Now      
Console.WriteLine("The date and time are {0} UTC.", _
                  TimeZoneInfo.ConvertTimeToUtc(dateNow))

注意

TimeZoneInfo.ConvertTimeToUtc(DateTime)メソッドは必ずしも結果も返りませんと同じでは、TimeZone.ToUniversalTimeDateTime.ToUniversalTimeメソッドです。The TimeZoneInfo.ConvertTimeToUtc(DateTime) method does not necessarily produce results that are identical to the TimeZone.ToUniversalTime and DateTime.ToUniversalTime methods. タイム ゾーンが複数の調整規則を含む場合は、ホスト システムのローカルTimeZoneInfo.ConvertTimeToUtc(DateTime)特定の日付と時刻に適切なルールが適用されます。If the host system's local time zone includes multiple adjustment rules, TimeZoneInfo.ConvertTimeToUtc(DateTime) applies the appropriate rule to a particular date and time. 他の 2 つのメソッドは、常に最新の調整規則を適用します。The other two methods always apply the latest adjustment rule.

ローカル時刻または UTC で日付と時刻の値を表していない場合、ToUniversalTimeメソッドは誤った結果を返す可能性があります。If the date and time value does not represent either the local time or UTC, the ToUniversalTime method will likely return an erroneous result. ただし、使用することができます、TimeZoneInfo.ConvertTimeToUtc指定されたタイム ゾーンから日付と時刻に変換します。However, you can use the TimeZoneInfo.ConvertTimeToUtc method to convert the date and time from a specified time zone. (詳細については取得する、TimeZoneInfoを変換先タイム ゾーンを表すオブジェクトを参照してくださいローカル システムで定義されているタイム ゾーンの検索)。次のコードでは、TimeZoneInfo.ConvertTimeToUtc東部標準時を UTC に変換します。(For details on retrieving a TimeZoneInfo object that represents the destination time zone, see Finding the time zones defined on a local system.) The following code uses the TimeZoneInfo.ConvertTimeToUtc method to convert Eastern Standard Time to UTC.

DateTime easternTime = new DateTime(2007, 01, 02, 12, 16, 00);
string easternZoneId = "Eastern Standard Time";
try
{
   TimeZoneInfo easternZone = TimeZoneInfo.FindSystemTimeZoneById(easternZoneId);
   Console.WriteLine("The date and time are {0} UTC.", 
                     TimeZoneInfo.ConvertTimeToUtc(easternTime, easternZone));
}
catch (TimeZoneNotFoundException)
{
   Console.WriteLine("Unable to find the {0} zone in the registry.", 
                     easternZoneId);
}                           
catch (InvalidTimeZoneException)
{
   Console.WriteLine("Registry data on the {0} zone has been corrupted.", 
                     easternZoneId);
}
Dim easternTime As New Date(2007, 01, 02, 12, 16, 00)
Dim easternZoneId As String = "Eastern Standard Time"
Try
   Dim easternZone As TimeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById(easternZoneId)
   Console.WriteLine("The date and time are {0} UTC.", _ 
                     TimeZoneInfo.ConvertTimeToUtc(easternTime, easternZone))
Catch e As TimeZoneNotFoundException
   Console.WriteLine("Unable to find the {0} zone in the registry.", _
                     easternZoneId)
Catch e As InvalidTimeZoneException
   Console.WriteLine("Registry data on the {0} zone has been corrupted.", _ 
                     easternZoneId)
End Try                           

このメソッドはスローなお、ArgumentException場合、DateTimeオブジェクトのKindプロパティおよびタイム ゾーンが一致しません。Note that this method throws an ArgumentException if the DateTime object's Kind property and the time zone are mismatched. 一致しない場合は、KindプロパティはSystem.DateTimeKindですが、TimeZoneInfoオブジェクトは、ローカル タイム ゾーンを表していません場合、または、KindプロパティはSystem.DateTimeKindですが、TimeZoneInfoオブジェクトが等しくないSystem.DateTimeKindです。A mismatch occurs if the Kind property is System.DateTimeKind but the TimeZoneInfo object does not represent the local time zone, or if the Kind property is System.DateTimeKind but the TimeZoneInfo object does not equal System.DateTimeKind.

これらのメソッドのすべてにかかるDateTime値をパラメーターと戻り値として、DateTime値。All of these methods take DateTime values as parameters and return a DateTime value. DateTimeOffset 、値、DateTimeOffset構造体には、ToUniversalTime日付と現在のインスタンスの時刻を UTC に変換するメソッドをインスタンス化します。For DateTimeOffset values, the DateTimeOffset structure has a ToUniversalTime instance method that converts the date and time of the current instance to UTC. 次の例では、ToUniversalTime現地時間と他のいくつかの時刻を世界協定時刻 (UTC) に変換します。The following example calls the ToUniversalTime method to convert a local time and several other times to Coordinated Universal Time (UTC).

DateTimeOffset localTime, otherTime, universalTime;
 
// Define local time in local time zone
localTime = new DateTimeOffset(new DateTime(2007, 6, 15, 12, 0, 0));
Console.WriteLine("Local time: {0}", localTime);
Console.WriteLine();

// Convert local time to offset 0 and assign to otherTime
otherTime = localTime.ToOffset(TimeSpan.Zero);
Console.WriteLine("Other time: {0}", otherTime);
Console.WriteLine("{0} = {1}: {2}", 
                  localTime, otherTime, 
                  localTime.Equals(otherTime));
Console.WriteLine("{0} exactly equals {1}: {2}", 
                  localTime, otherTime, 
                  localTime.EqualsExact(otherTime));
Console.WriteLine();
                  
// Convert other time to UTC
universalTime = localTime.ToUniversalTime(); 
Console.WriteLine("Universal time: {0}", universalTime);
Console.WriteLine("{0} = {1}: {2}", 
                  otherTime, universalTime, 
                  universalTime.Equals(otherTime));
Console.WriteLine("{0} exactly equals {1}: {2}", 
                  otherTime, universalTime, 
                  universalTime.EqualsExact(otherTime));
Console.WriteLine();
// The example produces the following output to the console:
//    Local time: 6/15/2007 12:00:00 PM -07:00
//    
//    Other time: 6/15/2007 7:00:00 PM +00:00
//    6/15/2007 12:00:00 PM -07:00 = 6/15/2007 7:00:00 PM +00:00: True
//    6/15/2007 12:00:00 PM -07:00 exactly equals 6/15/2007 7:00:00 PM +00:00: False
//    
//    Universal time: 6/15/2007 7:00:00 PM +00:00
//    6/15/2007 7:00:00 PM +00:00 = 6/15/2007 7:00:00 PM +00:00: True
//    6/15/2007 7:00:00 PM +00:00 exactly equals 6/15/2007 7:00:00 PM +00:00: True   
Dim localTime, otherTime, universalTime As DateTimeOffset
 
' Define local time in local time zone
localTime = New DateTimeOffset(#6/15/2007 12:00:00PM#)
Console.WriteLine("Local time: {0}", localTime)
Console.WriteLine()

' Convert local time to offset 0 and assign to otherTime
otherTime = localTime.ToOffset(TimeSpan.Zero)
Console.WriteLine("Other time: {0}", otherTime)
Console.WriteLine("{0} = {1}: {2}", _
                  localTime, otherTime, _
                  localTime.Equals(otherTime))
Console.WriteLine("{0} exactly equals {1}: {2}", _ 
                  localTime, otherTime, _
                  localTime.EqualsExact(otherTime))
Console.WriteLine()
                  
' Convert other time to UTC
universalTime = localTime.ToUniversalTime() 
Console.WriteLine("Universal time: {0}", universalTime)
Console.WriteLine("{0} = {1}: {2}", _
                  otherTime, universalTime, _ 
                  universalTime.Equals(otherTime))
Console.WriteLine("{0} exactly equals {1}: {2}", _ 
                  otherTime, universalTime, _
                  universalTime.EqualsExact(otherTime))
Console.WriteLine()
' The example produces the following output to the console:
'    Local time: 6/15/2007 12:00:00 PM -07:00
'    
'    Other time: 6/15/2007 7:00:00 PM +00:00
'    6/15/2007 12:00:00 PM -07:00 = 6/15/2007 7:00:00 PM +00:00: True
'    6/15/2007 12:00:00 PM -07:00 exactly equals 6/15/2007 7:00:00 PM +00:00: False
'    
'    Universal time: 6/15/2007 7:00:00 PM +00:00
'    6/15/2007 7:00:00 PM +00:00 = 6/15/2007 7:00:00 PM +00:00: True
'    6/15/2007 7:00:00 PM +00:00 exactly equals 6/15/2007 7:00:00 PM +00:00: True   

UTC から指定したタイム ゾーンへの変換Converting UTC to a designated time zone

UTC を現地時刻に変換するには、「に変換する (utc) から現地時刻」次のセクションを参照してください。To convert UTC to local time, see the "Converting UTC to Local Time" section that follows. (Utc) を指定する任意のタイム ゾーンの時刻に変換する呼び出し、ConvertTimeFromUtcメソッドです。To convert UTC to the time in any time zone that you designate, call the ConvertTimeFromUtc method. このメソッドは、次の 2 つのパラメーターを受け取ります。The method takes two parameters:

  • 変換対象の UTC。The UTC to convert. これは、必要があります、DateTime値がKindプロパティに設定されているUnspecifiedまたはUtcです。This must be a DateTime value whose Kind property is set to Unspecified or Utc.

  • UTC の変換先のタイム ゾーン。The time zone to convert the UTC to.

次のコードは、UTC を中部標準時に変換します。The following code converts UTC to Central Standard Time.

DateTime timeUtc = DateTime.UtcNow;
try
{
   TimeZoneInfo cstZone = TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time");
   DateTime cstTime = TimeZoneInfo.ConvertTimeFromUtc(timeUtc, cstZone);
   Console.WriteLine("The date and time are {0} {1}.", 
                     cstTime, 
                     cstZone.IsDaylightSavingTime(cstTime) ?
                             cstZone.DaylightName : cstZone.StandardName);
}
catch (TimeZoneNotFoundException)
{
   Console.WriteLine("The registry does not define the Central Standard Time zone.");
}                           
catch (InvalidTimeZoneException)
{
   Console.WriteLine("Registry data on the Central Standard Time zone has been corrupted.");
}
Dim timeUtc As Date = Date.UtcNow
Try
   Dim cstZone As TimeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time")
   Dim cstTime As Date = TimeZoneInfo.ConvertTimeFromUtc(timeUtc, cstZone)
   Console.WriteLine("The date and time are {0} {1}.", _
                     cstTime, _
                     IIf(cstZone.IsDaylightSavingTime(cstTime), _
                         cstZone.DaylightName, cstZone.StandardName))
Catch e As TimeZoneNotFoundException
   Console.WriteLine("The registry does not define the Central Standard Time zone.")
Catch e As InvalidTimeZoneException
   Console.WriteLine("Registry data on the Central Standard Time zone has been corrupted.")
End Try

UTC から現地時刻への変換Converting UTC to local time

UTC を現地時刻に変換する呼び出し、ToLocalTimeのメソッド、DateTimeオブジェクトに変換する時刻をします。To convert UTC to local time, call the ToLocalTime method of the DateTime object whose time you want to convert. メソッドの正確な動作は、オブジェクトの値によって異なります。Kindプロパティは、次の表に示すようです。The exact behavior of the method depends on the value of the object’s Kind property, as the following table shows.

DateTime.Kind 変換Conversion
DateTimeKind.Local 返します、DateTime変更されていない値です。Returns the DateTime value unchanged.
DateTimeKind.Unspecified いるものと、DateTime値は utc し、現地時刻を UTC に変換します。Assumes that the DateTime value is UTC and converts the UTC to local time.
DateTimeKind.Utc 変換、DateTimeを現地時刻の値。Converts the DateTime value to local time.

注意

TimeZone.ToLocalTimeメソッドの動作と同じように、DateTime.ToLocalTimeメソッドです。The TimeZone.ToLocalTime method behaves identically to the DateTime.ToLocalTime method. かかる、単一のパラメーターに変換する日付と時刻の値であります。It takes a single parameter, which is the date and time value to convert.

使用して、ローカル時刻に、指定のタイム ゾーンの時刻を変換することも、 static (Shared Visual Basic で)TimeZoneInfo.ConvertTimeメソッドです。You can also convert the time in any designated time zone to local time by using the static (Shared in Visual Basic) TimeZoneInfo.ConvertTime method. この手法は、次のセクションで説明しています。This technique is discussed in the next section.

任意の 2 つのタイム ゾーン間での変換Converting between any two time zones

次の 2 つのいずれかを使用して、2 つのタイム ゾーン間で変換できるstatic(Shared Visual Basic で) のメソッド、TimeZoneInfoクラス。You can convert between any two time zones by using either of the following two static (Shared in Visual Basic) methods of the TimeZoneInfo class:

  • ConvertTime

    このメソッドのパラメーターは、変換する日付と時刻の値、TimeZoneInfo日付と時刻の値のタイム ゾーンを表すオブジェクト、およびTimeZoneInfoに日付と時刻の値を変換先タイム ゾーンを表すオブジェクト。This method's parameters are the date and time value to convert, a TimeZoneInfo object that represents the time zone of the date and time value, and a TimeZoneInfo object that represents the time zone to convert the date and time value to.

  • ConvertTimeBySystemTimeZoneId

    このメソッドのパラメーターに日付と時刻の値を変換する日付と時刻の値に変換する、日付や時刻の値のタイム ゾーンの識別子およびタイム ゾーンの識別子です。This method's parameters are the date and time value to convert, the identifier of the date and time value's time zone, and the identifier of the time zone to convert the date and time value to.

どちらの方法を必要とする、Kindに変換する日付と時刻の値のプロパティとTimeZoneInfoそのタイム ゾーンを表すオブジェクトまたはタイム ゾーンの識別子が互いに対応します。Both methods require that the Kind property of the date and time value to convert and the TimeZoneInfo object or time zone identifier that represents its time zone correspond to one another. それ以外の場合、ArgumentExceptionがスローされます。Otherwise, an ArgumentException is thrown. たとえば場合、Kind日付と時刻の値のプロパティがDateTimeKind.Local場合、に、例外がスローされます、TimeZoneInfoメソッドにパラメーターとして渡されたオブジェクトは等しくありませんTimeZoneInfo.Localです。For example, if the Kind property of the date and time value is DateTimeKind.Local, an exception is thrown if the TimeZoneInfo object passed as a parameter to the method is not equal to TimeZoneInfo.Local. メソッドにパラメーターとして渡された識別子と等しくない場合にも、例外がスローTimeZoneInfo.Local.Idです。An exception is also thrown if the identifier passed as a parameter to the method is not equal to TimeZoneInfo.Local.Id.

次の例では、ConvertTimeハワイ標準時からを現地時刻に変換します。The following example uses the ConvertTime method to convert from Hawaiian Standard Time to local time.

DateTime hwTime = new DateTime(2007, 02, 01, 08, 00, 00);
try
{
   TimeZoneInfo hwZone = TimeZoneInfo.FindSystemTimeZoneById("Hawaiian Standard Time");
   Console.WriteLine("{0} {1} is {2} local time.", 
           hwTime, 
           hwZone.IsDaylightSavingTime(hwTime) ? hwZone.DaylightName : hwZone.StandardName, 
           TimeZoneInfo.ConvertTime(hwTime, hwZone, TimeZoneInfo.Local));
}
catch (TimeZoneNotFoundException)
{
   Console.WriteLine("The registry does not define the Hawaiian Standard Time zone.");
}                           
catch (InvalidTimeZoneException)
{
   Console.WriteLine("Registry data on the Hawaiian Standard Time zone has been corrupted.");
}
Dim hwTime As Date = #2/01/2007 8:00:00 AM#
Try
   Dim hwZone As TimeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById("Hawaiian Standard Time")
   Console.WriteLine("{0} {1} is {2} local time.", _
                     hwTime, _
                     IIf(hwZone.IsDaylightSavingTime(hwTime), hwZone.DaylightName, hwZone.StandardName), _
                     TimeZoneInfo.ConvertTime(hwTime, hwZone, TimeZoneInfo.Local))
Catch e As TimeZoneNotFoundException
   Console.WriteLine("The registry does not define the Hawaiian Standard Time zone.")
Catch e As InvalidTimeZoneException
   Console.WriteLine("Registry data on the Hawaiian Standard Time zone has been corrupted.")
End Try                     

DateTimeOffset 値の変換Converting DateTimeOffset values

日付と時刻の値によって表されるDateTimeOffsetオブジェクトが完全にタイム ゾーンではない時にそのタイム ゾーンのオブジェクトは、関連付けを解除するためには注意がインスタンス化します。Date and time values represented by DateTimeOffset objects are not fully time-zone aware because the object is disassociated from its time zone at the time it is instantiated. ただし、アプリケーションでは多くの場合、特定のタイム ゾーンの時刻ではなく、単に UTC からの 2 つの異なるオフセットに基づいて日時を変換する必要があります。However, in many cases an application simply needs to convert a date and time based on two different offsets from UTC rather than on the time in particular time zones. この変換を実行するには、現在のインスタンスを呼び出すことができますToOffsetメソッドです。To perform this conversion, you can call the current instance's ToOffset method. メソッドの 1 つのパラメーターは、新しい日付と時刻の値を返すメソッドのオフセットです。The method's single parameter is the offset of the new date and time value that the method is to return.

たとえば、Web ページに対するユーザー要求の日時が既知であり、MM/dd/yyyy hh:mm:ss zzzz の形式で文字列としてシリアル化される場合、次の ReturnTimeOnServer メソッドは、この日時値を Web サーバー上の日時に変換します。For example, if the date and time of a user request for a Web page is known and is serialized as a string in the format MM/dd/yyyy hh:mm:ss zzzz, the following ReturnTimeOnServer method converts this date and time value to the date and time on the Web server.

public DateTimeOffset ReturnTimeOnServer(string clientString)
{
   string format = @"M/d/yyyy H:m:s zzz";
   TimeSpan serverOffset = TimeZoneInfo.Local.GetUtcOffset(DateTimeOffset.Now);
   
   try
   {      
      DateTimeOffset clientTime = DateTimeOffset.ParseExact(clientString, format, CultureInfo.InvariantCulture);
      DateTimeOffset serverTime = clientTime.ToOffset(serverOffset);
      return serverTime;
   }
   catch (FormatException)
   {
      return DateTimeOffset.MinValue;
   }
}
Public Function ReturnTimeOnServer(clientString As String) As DateTimeOffset
   Dim format As String = "M/d/yyyy H:m:s zzz"
   Dim serverOffset As TimeSpan = TimeZoneInfo.Local.GetUtcOffset(DateTimeOffset.Now)
   
   Try      
      Dim clientTime As DateTimeOffset = DateTimeOffset.ParseExact(clientString, format, CultureInfo.InvariantCulture)
      Dim serverTime As DateTimeOffset = clientTime.ToOffset(serverOffset)
      Return serverTime
   Catch e As FormatException
      Return DateTimeOffset.MinValue
   End Try    
End Function

このメソッドが、UTC よりも 5 時間遅いタイム ゾーンの日時を表す文字列 "9/1/2007 5:32:07 -05:00" を渡された場合、米国の太平洋標準時ゾーンにあるサーバー用に 9/1/2007 3:32:07 AM -07:00 を太平洋標準時ゾーンでの実行例を次に示します。If the method is passed the string "9/1/2007 5:32:07 -05:00", which represents the date and time in a time zone five hours earlier than UTC, it returns 9/1/2007 3:32:07 AM -07:00 for a server located in the U.S. Pacific Standard Time zone.

TimeZoneInfoクラスには、オーバー ロードも含まれています、TimeZoneInfo.ConvertTime(DateTimeOffset, TimeZoneInfo)でタイム ゾーンの変換を実行するメソッドToOffset(TimeSpan)値。The TimeZoneInfo class also includes an overload of the TimeZoneInfo.ConvertTime(DateTimeOffset, TimeZoneInfo) method that performs time zone conversions with ToOffset(TimeSpan) values. メソッドのパラメーターは、DateTimeOffset値と時刻の変換先タイム ゾーンへの参照。The method's parameters are a DateTimeOffset value and a reference to the time zone to which the time is to be converted. メソッドの呼び出しが返されます、DateTimeOffset値。The method call returns a DateTimeOffset value. たとえば、ReturnTimeOnServerメソッド、前の例では呼び出しを次のように書き換えることができます、ConvertTime(DateTimeOffset, TimeZoneInfo)メソッドです。For example, the ReturnTimeOnServer method in the previous example could be rewritten as follows to call the ConvertTime(DateTimeOffset, TimeZoneInfo) method.

public DateTimeOffset ReturnTimeOnServer(string clientString)
{
   string format = @"M/d/yyyy H:m:s zzz";
   
   try
   {      
      DateTimeOffset clientTime = DateTimeOffset.ParseExact(clientString, format, 
                                  CultureInfo.InvariantCulture);
      DateTimeOffset serverTime = TimeZoneInfo.ConvertTime(clientTime, 
                                  TimeZoneInfo.Local);
      return serverTime;
   }
   catch (FormatException)
   {
      return DateTimeOffset.MinValue;
   }
}
Public Function ReturnTimeOnServer(clientString As String) As DateTimeOffset
   Dim format As String = "M/d/yyyy H:m:s zzz"
   
   Try      
      Dim clientTime As DateTimeOffset = DateTimeOffset.ParseExact(clientString, format, CultureInfo.InvariantCulture)
      Dim serverTime As DateTimeOffset = TimeZoneInfo.ConvertTime(clientTime, TimeZoneInfo.Local)
      Return serverTime
   Catch e As FormatException
      Return DateTimeOffset.MinValue
   End Try    
End Function

関連項目See also

TimeZoneInfo 日付、時刻、およびタイム ゾーン ローカル システムで定義されているタイム ゾーンの検索TimeZoneInfo Dates, times, and time zones Finding the time zones defined on a local system