C#でUNIXタイムスタンプを取得・変換する方法をわかりやすく解説!初心者向け
生徒
「C#でUNIXタイムスタンプっていう数字を見たんですが、これは何なんですか?」
先生
「UNIXタイムスタンプは、時間を数字で表す方法のひとつなんですよ。秒数で管理します。」
生徒
「数字で時間を表すってどういうことですか?普通なら年月日とか時間で見ると思ったんですが…」
先生
「確かに普段はそうですね。でもコンピューターの世界では、一つの基準日からの秒数で記録するほうが便利なことが多いんです。これをUNIXタイムスタンプと呼びます。C#でも簡単に扱えるので、一緒に見ていきましょう!」
1. UNIXタイムスタンプとは?
UNIXタイムスタンプとは「一九七〇年一月一日午前零時零分零秒(世界協定時)」を基準として、そこから何秒経過したかを数字で表したものです。例えば、ある時刻が「一七〇〇〇〇〇〇〇〇」というような大きな数字になっている場合、それは基準日からその秒数だけ時間が進んでいるという意味です。ふだん目にする年月日とは違う形ですが、計算がしやすく、世界中で幅広く使われています。C#ではこの秒数を簡単に変換できるので、日時を扱うプログラムではよく利用されます。
2. C#で現在のUNIXタイムスタンプを取得する方法
C#でUNIXタイムスタンプを取得したい場合、DateTimeOffsetという構造体を使うと、とても簡単に現在の秒数を取り出せます。プログラムで時刻を保存したり、外部のサービスとデータをやりとりするときに役に立ちます。以下は現在時刻をUNIXタイムスタンプとして取り出す例です。
long unixTime = DateTimeOffset.UtcNow.ToUnixTimeSeconds();
Console.WriteLine(unixTime);
このコードを実行すると、基準からの秒数が出力されます。数字が大きくて驚くかもしれませんが、プログラムではこの大きな数値がとても扱いやすいのです。
3. UNIXタイムスタンプをC#の日時に変換する
次に、UNIXタイムスタンプを普通の年月日や時間に戻す方法を解説します。数字のままでは読みづらいので、人が理解しやすい形に変換する場面が多いです。C#ではDateTimeOffset.FromUnixTimeSecondsを使えばすぐに元の時刻に変えることができます。
long unixTime = 1700000000;
DateTimeOffset date = DateTimeOffset.FromUnixTimeSeconds(unixTime);
Console.WriteLine(date);
このように、数値を渡すだけで日時の形式に変換できます。変換後は通常のDateTimeと同じように操作することが可能です。
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#はこの形式を標準でサポートしているため、開発の幅が大きく広がります。