如何将DateTime转换为自1970年以来的秒数?

我试图将C#DateTimevariables转换为Unix时间,即自1970年1月1日以来的秒数。看起来DateTime实际上是自0001年1月1日以来的'ticks'数量。

我目前的想法是从我的date时间减去1970年1月1日像这样:

TimeSpan span= DateTime.Now.Subtract(new DateTime(1970,1,1,0,0,0)); return span.TotalSeconds; 

有没有更好的办法?

基本上就是这样。 这些是我用来从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); } 

我看到的唯一的事情就是自1970年1月1日午夜开始

 TimeSpan span= DateTime.Now.Subtract(new DateTime(1970,1,1,0,0,0, DateTimeKind.Utc)); return span.TotalSeconds; 

如果您的系统的其余部分是用DateTimeOffset而不是DateTime确定的,那么有一个非常方便的function:

 long unixSeconds = DateTimeOffset.Now.ToUnixTimeSeconds(); 

您可能想要使用DateTime.UtcNow来避免时区问题

 TimeSpan span= DateTime.UtcNow.Subtract(new DateTime(1970,1,1,0,0,0)); 

如果所涉及的date时间是UTC,或者表示从未观测到夏令时的地区的本地时间,则此方法将会很有用。 DateTime差异例程不考虑夏令时,因此将6月1日午夜视为1月1日午夜后24小时的倍数。我不了解Windows中报告当前历史夏令时规则的任何内容所以我不认为在最近的夏令时规则改变之前有任何好的方法可以正确处理。

您可以创buildDateTime的startTime和endTime,然后执行endTime.Subtract(startTime)。 然后输出你的span.Seconds。

我认为这应该工作。