VB.NETでタイムゾーンを扱う方法!TimeZoneInfoで世界時間を操作
生徒
「先生、日本の今が昼間でも、地球の裏側では夜なんですよね?プログラムで海外の時間を知ることはできますか?」
先生
「はい、VB.NETには『TimeZoneInfo(タイムゾーン・インフォ)』という便利な機能があって、世界中の時間を計算できるんですよ。」
生徒
「タイムゾーン……なんだか難しそうな名前ですね。パソコンに詳しくない私でも海外の時間を表示できるでしょうか?」
先生
「大丈夫ですよ。時差の計算はパソコンに任せて、私たちは『どこの国の時間を知りたいか』を指定するだけです。基本的な使い方から丁寧に見ていきましょう!」
1. タイムゾーンとTimeZoneInfoとは?
世界中には「時差」というものがあります。日本が午後3時のとき、イギリスのロンドンは朝の6時といったように、地域ごとに時間の基準が異なります。この地域ごとの時間の枠組みをタイムゾーンと呼びます。
VB.NETというプログラミング言語で、この時差を扱うための特別な道具がTimeZoneInfo(タイムゾーン・インフォ)です。この道具を使えば、「今の日本時間はこうだけど、ニューヨークでは何時かな?」という計算を自動で行ってくれます。プログラミング未経験の方には「世界中の時計が入っている魔法の辞書」のようなイメージを持つと分かりやすいでしょう。難しい数式を覚える必要はありません、この道具の呼び出し方さえ知っていれば良いのです。
2. システムが設定されている「地域の時間」を確認する
まずは、今使っているパソコンがどこの国の時間に設定されているかを確認してみましょう。これを「ローカル・タイムゾーン」と呼びます。多くの場合は「東京」に設定されているはずです。VB.NETでは、以下のコードを書くだけで、そのパソコンの設定情報を取得できます。
' パソコンに設定されているタイムゾーンを取得
Dim myZone As TimeZoneInfo = TimeZoneInfo.Local
' 地域の名前を表示
Console.WriteLine("このパソコンの地域:" & myZone.DisplayName)
実行結果は以下のようになります。
このパソコンの地域:(UTC+09:00) 大阪、札幌、東京
DisplayName(ディスプレイ・ネーム)という命令を使うことで、私たちに馴染みのある地域名が表示されます。ここで出てくるUTC+09:00というのは、世界共通の基準時間から9時間進んでいる、という意味です。日本は世界の中でも早く朝が来る国なんですね。
3. 世界の基準!UTC(協定世界時)を知る
世界の時間を計算する際、必ず登場するのがUTC(協定世界時:きょうていせかいじ)です。これは、いわば「世界中の時間の元締め」のような存在です。ロンドンに近いイギリスの時間がこの基準に近いものとなっています。
プログラミングでは、まずこの「基準の時間」を求めてから、各国の時間を割り出すのが一番確実で正確な方法です。VB.NETでUTCを取得する方法を確認しましょう。
' 世界の基準時間(UTC)を取得
Dim sekaiJikan As DateTime = DateTime.UtcNow
Console.WriteLine("世界の基準時間:" & sekaiJikan.ToString("yyyy/MM/dd HH:mm:ss"))
実行結果は以下のようになります。
世界の基準時間:2026/03/28 10:54:14
日本時間よりも9時間戻った時間が表示されるはずです。このように、UtcNowを使うことで、特定の地域に縛られない「世界共通の今」を取得できます。海外の人とデータをやり取りするプログラムを作る際は、このUTCをよく使います。
4. 海外の特定の地域を指定して取得する方法
さて、いよいよ本題の「海外の時間を表示する」ことに挑戦しましょう。特定の地域を指定するには、FindSystemTimeZoneById(ファインド・システム・タイムゾーン・バイ・アイディー)という命令を使います。これは「システムの中から、指定した名前のタイムゾーンを探してきて」というお願いです。
今回は、アメリカのニューヨークの時間を取得してみましょう。ニューヨークのIDは "Eastern Standard Time"(米国東部標準時)と呼ばれています。少し長い名前ですが、これを指定するだけでOKです。
' ニューヨークのタイムゾーン情報を取得
Dim nyZone As TimeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time")
' 日本の今をニューヨークの時間に変換
Dim kyo As DateTime = DateTime.Now
Dim nyTime As DateTime = TimeZoneInfo.ConvertTime(kyo, nyZone)
Console.WriteLine("ニューヨークの今は:" & nyTime.ToString("yyyy/MM/dd HH:mm:ss"))
実行結果は以下のようになります。
ニューヨークの今は:2026/03/28 06:54:14
ConvertTime(コンバート・タイム)は「時間を変換する」という意味です。日本時間とニューヨークの情報を渡すだけで、時差を考慮した答えをパソコンが計算してくれます。これで、地球の裏側の時間も一発で分かりますね。
5. サマータイム(夏時間)も自動で考慮してくれる
海外には「サマータイム(夏時間)」という制度がある国が多いのをご存知でしょうか?夏の間だけ時計を1時間進めるという、ちょっと複雑な仕組みです。もし自分で計算しようとすると、「今はサマータイムの期間かな?」とカレンダーをチェックしなければなりません。
しかし、VB.NETのTimeZoneInfoは非常に賢いので、その地域のサマータイムのルールも全て把握しています。私たちが何もしなくても、日付を見て「今は夏時間だから1時間プラスしておこう」と自動で調整してくれます。初心者がつまずきやすい落とし穴を、パソコンが先回りして埋めてくれているのです。このおかげで、私たちは時差の細かいルールを気にせずプログラミングを楽しめます。
6. 利用可能なタイムゾーンを一覧で確認する方法
「ニューヨーク以外のIDはどうやって調べればいいの?」という疑問が湧きますよね。実は、パソコンの中には登録されている全てのタイムゾーンの名前をリストとして取り出す機能があります。これを使って、自分が調べたい地域の名前を確認することができます。
以下のコードは、パソコンに登録されているタイムゾーンの「ID」をいくつか表示するプログラムです。GetSystemTimeZonesという命令を使います。
' 登録されているタイムゾーンを順番に表示
Dim zones = TimeZoneInfo.GetSystemTimeZones()
' 数が多いので、最初の5つだけ表示してみる
For i As Integer = 0 To 4
Console.WriteLine("ID: " & zones(i).Id)
Next
実行結果(例)は以下のようになります。
ID: Dateline Standard Time
ID: UTC-11
ID: Hawaiian Standard Time
ID: Alaskan Standard Time
ID: Pacific Standard Time
このように、世界中の地域にそれぞれの「ID」が割り振られています。パリなら "Romance Standard Time"、シンガポールなら "Singapore Standard Time" といった具合です。これらを先ほどのコードの FindSystemTimeZoneById に当てはめれば、どこでも自由自在に時間を調べられます。
7. タイムゾーンを扱う際の間違いやすいポイント
プログラミング未経験の方が注意すべき点は、時間の「型」です。VB.NETには DateTime(日付と時間)と DateTimeOffset(時差情報付きの日付時間)という似たような名前のデータの種類があります。TimeZoneInfo を使うときは、どちらのデータを使っているのかを意識することが大切です。
また、パソコンの設定によっては、特定の地域の名前が登録されていないことも稀にあります。もし存在しない名前を指定すると、プログラムが「そんな名前の地域は見つからないよ!」と驚いて止まってしまいます。これを防ぐためには、正しいIDを正確に(大文字小文字も含めて)書くことが基本です。最初はサンプルコードをそのままコピーして動かし、少しずつ書き換えていくのが成功の秘訣です。
8. タイムゾーン操作をマスターするメリット
いかがでしたか?タイムゾーンの操作ができるようになると、作れるアプリの幅が大きく広がります。例えば、世界中を飛び回るビジネスマンのための世界時計ソフトや、海外の友達との通話時間を予約するシステム、さらには世界各地のニュースを現地時間で表示するサイトなど、ワクワクするようなアイデアが形になります。
パソコンの基礎知識がなくても、今回紹介した TimeZoneInfo のような便利な道具の使い方を知るだけで、あなたはすでに「世界の時間を操るプログラマー」の仲間入りです。最初は言葉に馴染みがなくても、何度もコードを書いて動かしているうちに、自然と身についていきます。ぜひ、色々な国の時間を表示させて、プログラミングを楽しんでくださいね!