1. ホーム
  2. c#

[解決済み] UnixのタイムスタンプをDateTimeに、またはその逆に変換するにはどうすればよいですか?

2022-03-17 02:48:01

質問

このサンプルコードがありますが、その後、ミリ秒/ナノ秒の問題について話し始めています。

同じ質問がMSDNにあります。 C# における Unix エポックからの秒数 .

今のところ、こんな感じです。

public Double CreatedEpoch
{
  get
  {
    DateTime epoch = new DateTime(1970, 1, 1, 0, 0, 0, 0).ToLocalTime();
    TimeSpan span = (this.Created.ToLocalTime() - epoch);
    return span.TotalSeconds;
  }
  set
  {
    DateTime epoch = new DateTime(1970, 1, 1, 0, 0, 0, 0).ToLocalTime();
    this.Created = epoch.AddSeconds(value);
  }
}

解決方法は?

ここに必要なものがあります。

public static DateTime UnixTimeStampToDateTime( double unixTimeStamp )
{
    // Unix timestamp is seconds past epoch
    DateTime dateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
    dateTime = dateTime.AddSeconds( unixTimeStamp ).ToLocalTime();
    return dateTime;
}

あるいは、Javaの場合(タイムスタンプの単位が秒ではなくミリ秒なので、異なります)。

public static DateTime JavaTimeStampToDateTime( double javaTimeStamp )
{
    // Java timestamp is milliseconds past epoch
    DateTime dateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
    dateTime = dateTime.AddMilliseconds( javaTimeStamp ).ToLocalTime();
    return dateTime;
}