C#
 Computer >> コンピューター >  >> プログラミング >> C#

C#のDateTimeOffset.ToUnixTimeSeconds()メソッドの使い方を徹底解説

はじめに

C#のDateTimeOffset.ToUnixTimeSeconds()メソッドは、1970年1月1日 00:00:00(UTC)——いわゆる「UNIXエポック」——から経過した秒数を取得するためのメソッドです。日時データをタイムスタンプとして扱いたい場合や、APIとの連携でUNIX時間が必要な場面でよく使われます。

構文

このメソッドの構文は以下のとおりです。

public long ToUnixTimeSeconds ();

引数は不要で、戻り値はlong型の秒数です。なお、対象の日時がUNIXエポックより前の場合は、負の値が返される点に注意してください。

使用例1:過去の日時を指定した場合

まずは1967年の日時を指定して、ToUnixTimeSeconds()メソッドを実装してみましょう。

using System;
public class Demo {
    public static void Main() {
        DateTimeOffset dateTimeOffset = new DateTimeOffset(1967, 11, 11, 6, 15, 45, new TimeSpan(3, 0, 0));
        Console.WriteLine("DateTimeOffset = {0}", dateTimeOffset);
        Console.WriteLine("Number of seconds: "+dateTimeOffset.ToUnixTimeSeconds());

        DateTimeOffset res = dateTimeOffset.ToOffset(new TimeSpan(-5, 0, 0));
        Console.WriteLine("\nDateTimeOffset (updated) = {0}", res);
        Console.WriteLine("Number of seconds: "+res.ToUnixTimeSeconds());
    }
}

実行結果

上記のコードを実行すると、次のような出力が得られます。

DateTimeOffset = 11/11/1967 6:15:45 AM +03:00
Number of seconds: -67553055
DateTimeOffset (updated) = 11/10/1967 10:15:45 PM -05:00
Number of seconds: -67553055

この例では、UNIXエポック(1970年)より前の日時を指定しているため、結果が負の値(-67553055)になっています。

使用例2:未来の日時を指定した場合

続いて、2019年の日時を指定した別の例を見てみましょう。

using System;
public class Demo {
    public static void Main() {
        DateTimeOffset dateTimeOffset = new DateTimeOffset(2019, 11, 11, 6, 15, 45, new TimeSpan(3, 0, 0));
        Console.WriteLine("DateTimeOffset = {0}", dateTimeOffset);
        Console.WriteLine("Number of seconds: "+dateTimeOffset.ToUnixTimeSeconds());

        DateTimeOffset res = dateTimeOffset.ToOffset(new TimeSpan(-5, 0, 0));
        Console.WriteLine("\nDateTimeOffset (updated) = {0}", res);
        Console.WriteLine("Number of seconds: "+res.ToUnixTimeSeconds());
    }
}

実行結果

このコードの出力は以下のとおりです。

DateTimeOffset = 11/11/2019 6:15:45 AM +03:00
Number of seconds: 1573442145
DateTimeOffset (updated) = 11/10/2019 10:15:45 PM -05:00
Number of seconds: 1573442145

重要なポイント

両方の例で注目すべき点は、ToOffset()メソッドでオフセット(タイムゾーン)を変更しても、ToUnixTimeSeconds()の結果は変わらないということです。

これは、UNIX時間が常にUTC(協定世界時)を基準に計算されるためです。ローカル時刻の表現が変わっても、指し示している瞬間(時刻そのもの)は同一であるため、経過秒数も同じ値になります。この性質を理解しておくと、タイムゾーンをまたぐシステム開発において日時の比較や保存を行う際に非常に役立ちます。

  1. C#のDateTimeOffset.Compare()メソッドの使い方をわかりやすく解説

    C#のDateTimeOffset.Compare()メソッドは、2つのDateTimeOffsetオブジェクトを比較し、最初の日時が2番目の日時よりも「前」なのか、「同じ」なのか、それとも「後」なのかを判定するための静的メソッドです。このメソッドは整数値(int型)を返し、その戻り値によって比較結果が以下のように表されます。0未満 − val1がval2より早い日時である場合0 − val1とval2が同一の日時である場合0より大きい − val1がval2より遅い日時である場合構文DateTimeOffset.Compare()メソッドの構文は以下の通りです。public static i

  2. 【C#入門】DateTimeOffset.AddYears()メソッドの使い方を徹底解説

    C#のDateTimeOffset.AddYears()メソッドは、現在のDateTimeOffsetインスタンスが表す日時に、指定した年数を加算した新しいDateTimeOffset値を返すメソッドです。元のインスタンスの値は変更されず、計算結果が新しいオブジェクトとして返される点に注意してください。構文AddYears()メソッドの構文は以下のとおりです。public DateTimeOffset AddYears (int val);引数valには、加算する年数を整数で指定します。負の値を指定すると、年数を減算(過去にさかのぼる)ことができます。主な特徴戻り値は新しいDateTimeOf