C#でUNIXタイムスタンプを取得・変換する方法をわかりやすく解説!初心者向け
生徒
「C#でUNIXタイムスタンプっていう数字を見たんですが、これは何なんですか?」
先生
「UNIXタイムスタンプは、時間を数字で表す方法のひとつなんですよ。秒数で管理します。」
生徒
「数字で時間を表すってどういうことですか?普通なら年月日とか時間で見ると思ったんですが…」
先生
「確かに普段はそうですね。でもコンピューターの世界では、一つの基準日からの秒数で記録するほうが便利なことが多いんです。これをUNIXタイムスタンプと呼びます。C#でも簡単に扱えるので、一緒に見ていきましょう!」
1. UNIXタイムスタンプとは?
UNIXタイムスタンプとは、「1970年1月1日 午前0時0分0秒(世界協定時)」を基準として、 そこから何秒が経過したかを数値で表した時間の表現方法です。 私たちが普段使っている「2024年5月1日 12時」のような表記とは異なり、 コンピューター向けに時間をシンプルな数字として扱える点が特徴です。
例えば「1700000000」という数値は、「基準の日時から17億秒が経過している」 という意味になります。一見すると意味が分かりにくい数字ですが、 足し算や引き算だけで時間差を計算できるため、プログラムでは非常に便利です。 世界中で同じ基準を使うため、国や地域が違っても時刻を正確に共有できます。
// UNIXタイムスタンプの例(数値そのもの)
long unixTimeSample = 1700000000;
Console.WriteLine(unixTimeSample);
このように、UNIXタイムスタンプは「日時を表すための共通ルール」と考えると理解しやすいでしょう。 C#では、この数値を簡単に取得したり、元の日時に戻したりできるため、 日時を扱うプログラムの基礎として覚えておくと安心です。
2. C#で現在のUNIXタイムスタンプを取得する方法
C#で「今この瞬間のUNIXタイムスタンプ」を取得したい場合は、
DateTimeOffsetを使う方法がもっとも分かりやすく、安全です。
UNIXタイムスタンプは世界協定時(UTC)を基準にしているため、
現在時刻もUTCとして取得するのが基本になります。
初心者の方は「今の日時を数字に変換する」と考えるとイメージしやすいでしょう。 この数値は、ログの記録やデータの保存、外部APIとの通信など、 さまざまな場面で使われます。
// 現在のUNIXタイムスタンプ(秒)を取得する例
long unixTime = DateTimeOffset.UtcNow.ToUnixTimeSeconds();
Console.WriteLine(unixTime);
このコードでは、まず現在のUTC時刻を取得し、 そこからUNIXタイムスタンプ(秒)へ変換しています。 実行すると「1700000000」のような大きな数字が表示されますが、 これは1970年1月1日からの経過秒数を表しています。
数字だけを見ると難しく感じるかもしれませんが、 プログラムにとっては非常に扱いやすい形式です。 まずは「C#ではこの一行で現在のUNIXタイムスタンプが取れる」 という点をしっかり覚えておきましょう。
3. UNIXタイムスタンプをC#の日時に変換する
次に、UNIXタイムスタンプ(秒の数値)を、私たちが普段見慣れている「年月日・時刻」の形に戻してみましょう。 タイムスタンプは計算には便利ですが、そのままだと人間には読みづらいので、 画面に表示したり、ログを確認したりする場面では日時へ変換することがよくあります。
C#ではDateTimeOffset.FromUnixTimeSecondsに数値を渡すだけで変換できます。
まずは「数値→日時」に変えられる、という流れを押さえるのがポイントです。
// UNIXタイムスタンプ(秒)を日時に変換する基本例
long unixTime = 1700000000;
DateTimeOffset date = DateTimeOffset.FromUnixTimeSeconds(unixTime);
Console.WriteLine(date);
実行すると、タイムスタンプに対応する日時が出力されます。
ここで表示されるのはDateTimeOffset型なので、
「日時として扱える形に戻った」と考えて大丈夫です。
もし画面に見やすく表示したい場合は、次のように書式を指定して出すこともできます。
// 見やすい形式に整えて表示する例
Console.WriteLine(date.ToString("yyyy/MM/dd HH:mm:ss"));
このように変換しておけば、外部サービスから受け取ったUNIXタイムスタンプでも、 何月何日の何時なのかをすぐ確認できます。 「数値を日時に戻して読める状態にする」という使い方はとても頻繁に登場するので、 基本の書き方として覚えておくと安心です。
4. DateTimeからUNIXタイムスタンプへ変換する方法
今度は、人が読める日時からUNIXタイムスタンプへ変換する方法です。アプリでユーザーが入力した年月日や、システムが生成した日時をUNIX形式へ変えるときに使います。
DateTime dt = new DateTime(2024, 5, 1, 12, 0, 0, DateTimeKind.Utc);
long unixTime = ((DateTimeOffset)dt).ToUnixTimeSeconds();
Console.WriteLine(unixTime);
ここでは世界協定時として扱うためにDateTimeKind.Utcを指定しています。時間の扱いはズレが発生しやすいので、基準をそろえることが重要になります。
5. ミリ秒のUNIXタイムスタンプを扱う場合
サービスによっては、秒ではなく「ミリ秒」でUNIXタイムスタンプを扱うことがあります。ミリ秒は一秒を千の単位で表すため、より細かい時間を記録できます。C#ではミリ秒単位のタイムスタンプも簡単に取得できます。
long unixMilli = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
Console.WriteLine(unixMilli);
秒単位より長い数字になりますが、仕組みは同じです。サービス連携やログの保存など、細かい時刻が必要なケースでよく利用されます。
6. UNIXタイムスタンプを使うメリット
UNIXタイムスタンプがさまざまな場面で利用されている理由として、時間の計算がしやすい点が挙げられます。年月日形式だと月の長さやうるう年など複雑な要素がありますが、秒数なら単純な数字の計算で済みます。また世界中で統一された基準で扱えるため、異なる地域のシステムと通信するときにも便利です。C#はこの形式を標準でサポートしているため、開発の幅が大きく広がります。
まとめ
UNIXタイムスタンプの全体像を振り返ろう
この記事では、C#を使ってUNIXタイムスタンプを取得・変換する方法について、基礎から丁寧に解説してきました。 UNIXタイムスタンプとは、1970年1月1日午前0時0分0秒を基準として、そこから何秒、または何ミリ秒が経過したかを数値で表したものです。 普段目にする年月日や時刻とは見た目が大きく異なりますが、コンピューターにとっては非常に扱いやすく、世界共通で利用できるという大きな利点があります。
C#では DateTimeOffset を使うことで、現在のUNIXタイムスタンプを簡単に取得できました。
また、取得した数値を再び日時に戻すことで、人間にとって分かりやすい形で表示することもできました。
さらに、DateTime からUNIXタイムスタンプへ変換する方法や、秒単位だけでなくミリ秒単位で扱うケースについても確認しました。
これらの操作は、ログ管理、外部API連携、データベース保存、時間差の計算など、実際の開発現場で頻繁に登場します。
特に重要なのは、UNIXタイムスタンプが世界協定時を基準にしているという点です。
日本時間だけを前提に考えてしまうと、想定外の時間ズレが発生することがあります。
そのため、C#で日時を扱う際には、UTCを意識しながら DateTimeKind.Utc を指定したり、
DateTimeOffset を活用したりすることが、安全で確実な方法と言えるでしょう。
まとめとして確認したい基本サンプル
最後に、この記事で学んだ内容を一度に確認できる簡単なサンプルを見ておきましょう。 現在時刻をUNIXタイムスタンプで取得し、その数値を再び日時へ変換して表示する流れです。 実際のプログラムでも、このような形で使われることがとても多いです。
// 現在のUNIXタイムスタンプを取得
long unixTime = DateTimeOffset.UtcNow.ToUnixTimeSeconds();
// UNIXタイムスタンプを日時に変換
DateTimeOffset date = DateTimeOffset.FromUnixTimeSeconds(unixTime);
// 結果を表示
Console.WriteLine($"UNIX Time : {unixTime}");
Console.WriteLine($"DateTime : {date:yyyy/MM/dd HH:mm:ss}");
このコードを動かすことで、「今この瞬間」がどのような数値として管理され、 どのように日時へ戻せるのかを一目で確認できます。 UNIXタイムスタンプの考え方に慣れるためにも、ぜひ自分の環境で何度か実行してみてください。
生徒
「最初はUNIXタイムスタンプがただの大きな数字にしか見えなかったんですが、 秒数で時間を管理しているって分かると、だんだん意味がつかめてきました。」
先生
「そうですね。最初は戸惑いますが、考え方が分かればとても便利な仕組みです。 特に時間の差を計算するときは、数字だけで扱えるのが強みですね。」
生徒
「C#だと DateTimeOffset を使えば、
取得も変換もすごく簡単に書けるのが印象的でした。
ログとかAPI連携で使われている理由も分かった気がします。」
先生
「その理解はとても大切です。UNIXタイムスタンプは、 初心者から実務まで幅広く使われる考え方なので、 今回学んだ内容をしっかり身につけておくと、今後の開発が楽になりますよ。」
生徒
「これから日時を扱うときは、UNIXタイムスタンプとUTCを意識して書いてみます! だいぶ自信がつきました。」
今回のまとめを通して、UNIXタイムスタンプの基本的な考え方と、 C#での具体的な扱い方を一通り理解できたはずです。 日時処理は最初につまずきやすい分野ですが、基礎を押さえておけば確実に武器になります。 ぜひ、実際のプログラムの中で積極的に使ってみてください。