Answers:
基本上就是这样。这些是我用来在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开始,可以从static获得与Unix Epoch相等的DateTime DateTime.UnixEpoch
。
t specify this explicitly and somewhere later in code you
没有ToUniversalTime(),则最终Utc时间会很糟糕,因为默认情况下DateTime不是NOT Utc。
如果使用DateTimeOffset代替DateTime可以使系统的其余部分正常,则有一个非常方便的功能:
long unixSeconds = DateTimeOffset.Now.ToUnixTimeSeconds();
您可以创建DateTime的startTime和endTime,然后执行endTime.Subtract(startTime)。然后输出您的跨度。
我认为应该可以。
我在微积分中使用2000年而不是大纪元时间。使用较小的数字易于存储和运输,并且支持JSON。
公元2000年是第二纪年946684800。
从0001年1月1日开始,2000年是第二个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从0001年1月1日开始计时
63713433600自0001年1月1日以来的秒数
自大纪元以来1577836800秒
631152000秒自2000年以来
参考文献:
时代时间转换器:https://www.epochconverter.com