.NET TIPS

UNIX時間を求めるには?[C#、VB]

デジタルアドバンテージ 一色 政彦
2010/02/25

 時間データを取り扱う際に、「UNIX時間」が用いられることがある。UNIX時間とは、UTC(=協定世界時)の1970年1月1日00:00:00秒(=「UNIXエポック:UNIX Epoch」と呼ばれる)からの経過秒数のことである。

 .NET FrameworkでUNIX時間を求める場合、専用のプロパティなどは提供されていないので、自ら計算して算出する必要がある。具体的には、対象の日時情報を表すDateTime構造体(System名前空間)のオブジェクトを作成し、そのToUniversalTimeメソッド(パラメータなし)を呼び出してUTC時間を表すDateTimeオブジェクトに変換する。次に、このUTC時間からUNIXエポックを差し引いた経過時間を表すTimeSpan構造体(System名前空間)のオブジェクトを取得する。最後に、TimeSpanオブジェクトのTotalSecondsプロパティを呼び出して、経過秒数を求めればよい。

 以上の内容をコンソール・アプリケーションとして実装したのが、次のコードである。

using System;

class Program
{
  static void Main()
  {
    // 現在日時を表すDateTimeオブジェクトを取得
    DateTime targetTime = DateTime.Now;
   
    long unixTime = GetUnixTime(targetTime);
    Console.WriteLine(unixTime.ToString());
    // 出力例:1266864932

    Console.ReadLine();
  }

  // UNIXエポックを表すDateTimeオブジェクトを取得
  private static DateTime UNIX_EPOCH =
    new DateTime(1970, 1, 1, 0, 0, 0, 0);

  public static long GetUnixTime(DateTime targetTime)
  {
    // UTC時間に変換
    targetTime = targetTime.ToUniversalTime();

    // UNIXエポックからの経過時間を取得
    TimeSpan elapsedTime = targetTime - UNIX_EPOCH;
   
    // 経過秒数に変換
    return (long)elapsedTime.TotalSeconds;
  }
}
Module Module1

  Sub Main()

    ' 現在日時を表すDateTimeオブジェクトを取得
    Dim targetTime As DateTime = DateTime.Now
   
    Dim unixTime As Long = GetUnixTime(targetTime)
    Console.WriteLine(unixTime.ToString())
    ' 出力例:1266864932

    Console.ReadLine()

  End Sub

  ' UNIXエポックを表すDateTimeオブジェクトを取得
  Private UNIX_EPOCH As DateTime = _
    New DateTime(1970, 1, 1, 0, 0, 0, 0)

  Private Function GetUnixTime(ByVal targetTime As DateTime) As Long

    ' UTC時間に変換
    targetTime = targetTime.ToUniversalTime()

    ' UNIXエポックからの経過時間を取得
    Dim elapsedTime As TimeSpan = targetTime - UNIX_EPOCH

    ' 経過秒数に変換
    Return CType(elapsedTime.TotalSeconds, Long)

  End Function

End Module
UNIX時間を求めるサンプル・プログラム(上:C#、下:VB)

 特に難しいところはないだろう。コード中にコメントを多く入れているので、コードの説明は割愛する。End of Article

カテゴリ:クラス・ライブラリ 処理対象:日付と時刻
使用ライブラリ:DateTime構造体(System名前空間)
使用ライブラリ:TimeSpan構造体(System名前空間)
関連TIPS:UTC(世界協定時)を取得するには?

この記事と関連性の高い別の.NET TIPS
秒数を「hh:mm:ss」形式の文字列にするには?
日時や時間間隔の加減算を行うには?
UTC(世界協定時)を取得するには?
処理時間を正確に計測するには?
Stopwatchクラスで時間計測をリセットして再開するには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間