VB.NETでUNIXタイムスタンプを扱う方法を完全解説!初心者向け変換ガイド
生徒
「先生、プログラミングの勉強をしていたら『UNIXタイムスタンプ』という数字の羅列が出てきたのですが、これは一体何ですか?」
先生
「それは、コンピューターが時間を管理するために使っている特別な数字のことですよ。VB.NETでもよく使われます。」
生徒
「ただの大きな数字にしか見えないのですが、これを普段私たちが使っている日付や時刻に直すことはできますか?」
先生
「もちろんです!VB.NETの機能を使えば、一瞬で分かりやすい日時に変換できます。その逆も可能ですよ。やり方をゆっくり解説しますね。」
1. UNIXタイムスタンプとは?時間の「ものさし」を知ろう
プログラミング未経験の方にとって、「UNIX(ユニックス)タイムスタンプ」は非常に奇妙なものに見えるかもしれません。これは、1970年1月1日午前0時0分0秒を起点として、そこから何秒経過したかを数えた数字のことです。例えば、この記事を書いている時点では「1700000000」といった非常に大きな数字になります。
なぜこんな面倒な数え方をするのでしょうか。それは、コンピューターにとって「2026年3月28日」といった文字よりも、「起点から何秒」という単なる数字の方が、計算や比較が圧倒的に楽だからです。世界中のサーバーやインターネット上のサービスでは、この共通の「ものさし」を使って時間のやり取りをしています。VB.NETでシステム開発をする際も、データベースや外部サービスとの連携で必ずと言っていいほど登場する重要な知識です。
2. VB.NETで現在のUNIXタイムスタンプを取得する
まずは、今のこの瞬間がUNIXタイムスタンプで言うと何秒なのかを求めてみましょう。VB.NETにはDateTimeOffset(デートタイムオフセット)という便利な道具があります。これを使うと、現在の時刻を数値に変換することができます。昔のプログラムでは複雑な引き算が必要でしたが、今はとてもシンプルに書けるようになっています。
' 現在の時刻をUNIXタイムスタンプ(秒)で取得する
Dim genzai As DateTimeOffset = DateTimeOffset.Now
Dim unixTime As Long = genzai.ToUnixTimeSeconds()
Console.WriteLine("現在のUNIXタイムスタンプは: " & unixTime)
実行結果は以下のようになります。
現在のUNIXタイムスタンプは: 1774695094
ここで出てくるLong(ロング)というのは、非常に大きな整数を入れるための箱(変数)の種類です。UNIXタイムスタンプは桁数が多いため、普通の整数用の箱(Integer)だと溢れてしまうことがあるので、この大きな箱を使います。ToUnixTimeSecondsという命令を呼ぶだけで、一瞬で数字に変換されます。
3. UNIXタイムスタンプを普通の日時に変換する方法
次に、数字の羅列であるUNIXタイムスタンプを、私たちが読める「〇月〇日」といった形式に戻す方法を学びましょう。これをデコードや変換と呼びます。例えば、インターネットから取得したデータが数字だった場合、この操作をして画面に表示させる必要があります。VB.NETではFromUnixTimeSecondsという命令を使います。
' 数字(UNIXタイム)を日付に戻す
Dim sampleTime As Long = 1711623600
Dim henkanGo As DateTimeOffset = DateTimeOffset.FromUnixTimeSeconds(sampleTime)
' 私たちが分かりやすい形式で表示
Console.WriteLine("変換後の日時は: " & henkanGo.LocalDateTime.ToString("yyyy年MM月dd日 HH時mm分ss秒"))
実行結果は以下のようになります。
変換後の日時は: 2024年03月28日 20時00分00秒
LocalDateTime(ローカルデートタイム)という言葉が出てきましたが、これは「自分の国の時間(日本時間など)に合わせて表示する」という意味です。UNIXタイムスタンプは世界共通の時間(世界標準時)を基準にしているため、日本で使うときにはこの変換が必要になります。これだけで、一気に親しみやすい表示になりましたね。
4. ミリ秒単位での精密な時間を扱う方法
プログラミングの世界では、「秒」よりもさらに細かい「ミリ秒(1000分の1秒)」単位で時間を管理することがあります。ゲームの判定や精密なデータの記録などでよく使われます。UNIXタイムスタンプにもミリ秒単位のバージョンがあり、VB.NETではそれも簡単に扱えます。使う命令の名前が少し変わるだけなので、セットで覚えてしまいましょう。
' ミリ秒単位のUNIXタイムスタンプを取得する
Dim ima As DateTimeOffset = DateTimeOffset.Now
Dim milliUnix As Long = ima.ToUnixTimeMilliseconds()
Console.WriteLine("ミリ秒のタイムスタンプ: " & milliUnix)
実行結果は以下のようになります。
ミリ秒のタイムスタンプ: 1774695094567
秒単位のときよりもさらに桁数が多くなっていますね。末尾の3桁がミリ秒を表しています。変換して戻すときも、同様にFromUnixTimeMillisecondsという命令を使えば大丈夫です。どちらの単位を扱う場合でも、基本の流れは全く同じです。
5. 特定の日付からUNIXタイムスタンプを作る
「今」ではなく、「自分の誕生日」や「特定のイベントの日」のUNIXタイムスタンプを知りたい場合はどうすればよいでしょうか。まずはDateTime型でその日付を作り、それをDateTimeOffsetに変換してから秒数を求めます。少し手順が増えますが、基本の組み合わせで実現できます。
' 2026年1月1日のタイムスタンプを作る
Dim yoteibi As New DateTime(2026, 1, 1, 0, 0, 0)
Dim offsetDate As New DateTimeOffset(yoteibi)
Dim resultUnix As Long = offsetDate.ToUnixTimeSeconds()
Console.WriteLine("2026年元旦のタイムスタンプ: " & resultUnix)
実行結果は以下のようになります。
2026年元旦のタイムスタンプ: 1767193200
New DateTime(2026, 1, 1, 0, 0, 0)というのは、「2026年1月1日0時0分0秒」という新しい日付データを自作する命令です。これを元にしてUNIXタイムスタンプを計算させることで、未来や過去の特定の瞬間を数値化することができます。カレンダー予約システムなどを作る際に非常に役立つテクニックです。
6. 初心者が知っておきたい「世界標準時」の注意点
UNIXタイムスタンプを扱う上で、避けて通れないのが「時差」のお話です。UNIXタイムスタンプは「グリニッジ標準時(UTC)」という、世界で基準となる場所の時間を指しています。日本はそこから「9時間」進んでいます。パソコンを触ったことがない方には少しややこしいかもしれませんが、日本で「お昼の12時」のとき、世界標準時は「朝の3時」なのです。
VB.NETのDateTimeOffsetを使えば、この9時間の時差を自動的に考慮してくれますが、古い書き方や特殊な計算を自分でする場合は、この「9時間のズレ」を忘れると、時間がずれて表示されてしまう原因になります。今回紹介した最新の命令(DateTimeOffset)を使っていれば、基本的にはパソコンが自動で調整してくれるので安心してください。常に「世界共通の数字」と「日本の見慣れた時間」の二つの見方があることを、頭の片隅に置いておきましょう。
7. 日時変換でよく使うフォーマット指定
UNIXタイムスタンプから変換した日時は、そのまま表示するだけでなく、好きな見た目に整えることができます。これを「フォーマット(書式設定)」と呼びます。ToStringという命令のカッコの中に、特定の記号を入れることで自由自在に見た目を変えられます。初心者の方でも覚えやすい、代表的なパターンをいくつか紹介します。
- yyyy/MM/dd → 2026/03/28 のように表示
- yyyy年MM月dd日(ddd) → 2026年03月28日(土) のように曜日まで表示
- HH:mm:ss → 20:30:00 のように24時間制で表示
このように記号を組み合わせるだけで、自分好みのカレンダーや時計を作ることができます。プログラムが返してくる生の日付データは少し無愛想ですが、このフォーマットを使いこなすことで、使う人に優しい、親切な画面作りができるようになります。
8. エラーを防ぐ!タイムスタンプ操作のコツ
最後に、プログラムが途中で止まってしまわないための大切なポイントをお伝えします。UNIXタイムスタンプを扱う際、インターネットから取得したデータが「空っぽ(何もない状態)」だったり、数字ではない「あいうえお」のような文字が混ざっていたりすると、変換しようとした瞬間にエラーが発生します。
そのため、本番のアプリを作るときは、まず「これは本当に数字かな?」と確認するステップを挟みます。また、UNIXタイムスタンプは桁数が非常に多いため、必ずLong型の箱を使うことを忘れないでください。小さな箱を使おうとすると「オーバーフロー」という、入りきらなくて爆発してしまうようなエラーが起きてしまいます。こうした「箱の大きさ」と「中身が正しいか」を意識することが、トラブルの少ないプログラムを書くための秘訣です。