回答:
基本的にはそれだけです。これらは、Unixエポック時間との間で変換するために使用する方法です。
public static DateTime ConvertFromUnixTimestamp(double timestamp)
{
DateTime origin = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
return origin.AddSeconds(timestamp);
}
public static double ConvertToUnixTimestamp(DateTime date)
{
DateTime origin = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
TimeSpan diff = date.ToUniversalTime() - origin;
return Math.Floor(diff.TotalSeconds);
}
更新:.Net Core 2.1および.Net Standard 2.1以降、Unixエポックに等しいDateTimeはstaticから取得できますDateTime.UnixEpoch
。
t specify this explicitly and somewhere later in code you
デフォルトではDateTimeはUtcではないため、ToUniversalTime()を使用しないとUtc時間は不正になります。
システムの残りの部分が、DateTimeの代わりにDateTimeOffsetで問題がない場合、非常に便利な機能があります。
long unixSeconds = DateTimeOffset.Now.ToUnixTimeSeconds();
1970年1月1日午前0時からのはずです
TimeSpan span= DateTime.Now.Subtract(new DateTime(1970,1,1,0,0,0, DateTimeKind.Utc));
return span.TotalSeconds;
タイムゾーンの問題を回避するために、おそらくDateTime.UtcNowを使用したいでしょう。
TimeSpan span= DateTime.UtcNow.Subtract(new DateTime(1970,1,1,0,0,0));
私の計算では、エポックタイムの代わりに2000年を使用しています。小さい数での作業は、保存と転送が簡単で、JSONに対応しています。
2000年はエポックタイムの2番目の946684800でした。
2000年は、0001年1月1日から2番目の63082281600でした。
DateTime.UtcNowティックは、0001年1月1日から始まります
2000年からの秒数:
DateTime.UtcNow.Ticks/10000000-63082281600
Unix時間からの秒数:
DateTime.UtcNow.Ticks/10000000-946684800
たとえば、2020年は次のとおりです。
var year2020 =(new DateTime())。AddYears(2019).Ticks; // DateTimeはすでに1年目から始まっているため
637134336000000000 1月1日からのティック0001
63713433600 0001年1月1日からの秒数
エポックタイムから1577836800秒
631152000 2000年からの秒数
参照:
エポックタイムコンバーター:https : //www.epochconverter.com
1年目のコンバーター:https : //www.epochconverter.com/seconds-days-since-y0