DOBON.NET プログラミング道: .NET Framework, VB.NET, C#, Visual Basic, Visual Studio, インストーラ, ...

DOBON.NET

タイムゾーンを取得する

.NET Framework 2.0以前

タイムゾーンに関する情報はTimeZoneクラスにより取得できます。CurrentTimeZoneプロパティにより、現在のコンピュータシステムのタイムゾーンを取得できます。

なお、こちらで紹介しているように、ローカル時刻をUTCに変換するには、DateTime.ToUniversalTimeメソッドを、UTCからローカル時刻に変更するには、DateTime.ToLocalTimeメソッドを使うこともできます。

[VB.NET]
'現在のローカル時間を取得
Dim nowTime As DateTime = DateTime.Now
Console.WriteLine("現在の日時:{0}", nowTime)

'世界協定時刻(UTC: Coordinated Universal Time)オフセットの取得
Dim utcOffset As TimeSpan = _
    System.TimeZone.CurrentTimeZone.GetUtcOffset(nowTime)
Console.WriteLine("GetUtcOffset:{0}", utcOffset)

'現地時間に対応する世界協定時刻の取得
Dim utc As DateTime = _
    System.TimeZone.CurrentTimeZone.ToUniversalTime(nowTime)
Console.WriteLine("ToUniversalTime:{0}", utc)

'世界協定時刻に対応する現地時間の取得
Dim localTime As DateTime = _
    System.TimeZone.CurrentTimeZone.ToLocalTime(utc)
Console.WriteLine("ToLocalTime:{0}", localTime)
[C#]
//現在のローカル時間を取得
DateTime nowTime = DateTime.Now;
Console.WriteLine("現在の日時:{0}", nowTime);

//世界協定時刻(UTC: Coordinated Universal Time)オフセットの取得
TimeSpan utcOffset = 
    System.TimeZone.CurrentTimeZone.GetUtcOffset(nowTime);
Console.WriteLine("GetUtcOffset:{0}", utcOffset);

//現地時間に対応する世界協定時刻の取得
DateTime utc = 
    System.TimeZone.CurrentTimeZone.ToUniversalTime(nowTime);
Console.WriteLine("ToUniversalTime:{0}", utc);

//世界協定時刻に対応する現地時間の取得
DateTime localTime = 
    System.TimeZone.CurrentTimeZone.ToLocalTime(utc);
Console.WriteLine("ToLocalTime:{0}", localTime);
出力例:
現在の日時:2003/12/03 18:57:13
GetUtcOffset:09:00:00
ToUniversalTime:2003/12/03 9:57:13
ToLocalTime:2003/12/03 18:57:13

.NET Framework 3.5以降

.NET Framework 3.5からはTimeZoneクラスの代わりにTimeZoneInfoクラスを使用することが推奨されています。ただしTimeZoneInfoクラスはWindows XP SP2以降のOSでのみ使用できます。

現在のコンピュータシステムのタイムゾーンは、TimeZoneInfo.Localプロパティで取得できます。

UTCオフセット(タイムゾーン標準時とUTCとの差、時差)は、BaseUtcOffsetプロパティまたはGetUtcOffsetメソッドで取得できます。GetUtcOffsetメソッドはBaseUtcOffsetプロパティと違い、特定の日時での時間差を返し、様々な調整規則も適用します。

タイムゾーン標準時をUTCに変換するにはConvertTimeToUtcメソッドを、UTCをタイムゾーン標準時に変換するにはConvertTimeFromUtcメソッドを使用します。または、ConvertTimeメソッドを使って変換することもできます。なおこれらのメソッドの結果は、TimeZoneクラスのToUniversalTimeメソッドとToLocalTimeメソッドの結果とは異なる可能性があります。詳しくは、こちらで説明します。

[VB.NET]
'現在のローカル時間を取得
Dim nowTime As DateTime = DateTime.Now
Console.WriteLine("現在の日時:{0}", nowTime)

'世界協定時刻(UTC: Coordinated Universal Time)オフセットの取得
Dim baseUtcOffset As TimeSpan = System.TimeZoneInfo.Local.BaseUtcOffset
Console.WriteLine("BaseUtcOffset:{0}", baseUtcOffset)

'現在の時間でのUTCオフセットの取得
Dim utcOffset As TimeSpan = System.TimeZoneInfo.Local.GetUtcOffset(nowTime)
Console.WriteLine("GetUtcOffset:{0}", utcOffset)

'現地時間に対応する世界協定時刻の取得
Dim utc As DateTime = _
    System.TimeZoneInfo.ConvertTimeToUtc(nowTime, System.TimeZoneInfo.Local)
Console.WriteLine("ToUniversalTime:{0}", utc, System.TimeZoneInfo.Local)

'世界協定時刻に対応する現地時間の取得
Dim localTime As DateTime = _
    System.TimeZoneInfo.ConvertTimeFromUtc(utc, System.TimeZoneInfo.Local)
Console.WriteLine("ToLocalTime:{0}", localTime)
[C#]
//現在のローカル時間を取得
DateTime nowTime = DateTime.Now;
Console.WriteLine("現在の日時:{0}", nowTime);

//世界協定時刻(UTC: Coordinated Universal Time)オフセットの取得
TimeSpan baseUtcOffset = System.TimeZoneInfo.Local.BaseUtcOffset;
Console.WriteLine("BaseUtcOffset:{0}", baseUtcOffset);

//現在の時間でのUTCオフセットの取得
TimeSpan utcOffset = System.TimeZoneInfo.Local.GetUtcOffset(nowTime);
Console.WriteLine("GetUtcOffset:{0}", utcOffset);

//現地時間に対応する世界協定時刻の取得
DateTime utc =
    System.TimeZoneInfo.ConvertTimeToUtc(nowTime, System.TimeZoneInfo.Local);
Console.WriteLine("ToUniversalTime:{0}", utc, System.TimeZoneInfo.Local);

//世界協定時刻に対応する現地時間の取得
DateTime localTime =
    System.TimeZoneInfo.ConvertTimeFromUtc(utc, System.TimeZoneInfo.Local);
Console.WriteLine("ToLocalTime:{0}", localTime);
  • 履歴:
  • 2008/7/9 TimeZoneInfoクラスの説明を追加。