如何在c#中将Unix纪元时间转换为实时时间?(新纪元开始于1970年1月1日)


当前回答

您实际上需要AddMilliseconds(毫秒),而不是seconds。添加秒会给你一个超出范围的异常。

其他回答

更新2020

您可以使用DateTimeOffset来实现这一点

DateTimeOffset dateTimeOffset = DateTimeOffset.FromUnixTimeSeconds(epochSeconds);
DateTimeOffset dateTimeOffset2 = DateTimeOffset.FromUnixTimeMilliseconds(epochMilliseconds);

如果您需要DateTime对象而不是DateTimeOffset,那么您可以调用DateTime属性

DateTime dateTime = dateTimeOffset.DateTime;

原来的答案

我假定您指的是Unix时间,它被定义为自1970年1月1日午夜(UTC)以来的秒数。

private static readonly DateTime epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);

public static DateTime FromUnixTime(long unixTime)
{
    return epoch.AddSeconds(unixTime);
}

. net的最新版本(v4.6)刚刚增加了对Unix时间转换的内置支持。这包括以秒或毫秒表示的到Unix时间和从Unix时间。

Unix时间(单位:秒)到DateTimeOffset:

DateTimeOffset dateTimeOffset = DateTimeOffset.FromUnixTimeSeconds(1000);

DateTimeOffset到Unix时间(单位:秒):

long unixTimeStampInSeconds = dateTimeOffset.ToUnixTimeSeconds();

Unix时间(单位:毫秒)到DateTimeOffset:

DateTimeOffset dateTimeOffset = DateTimeOffset.FromUnixTimeMilliseconds(1000000);

DateTimeOffset到Unix时间(单位:毫秒):

long unixTimeStampInMilliseconds= dateTimeOffset.ToUnixTimeMilliseconds();

注意:这些方法转换为DateTimeOffset和DateTimeOffset。要获得一个DateTime表示,只需使用DateTimeOffset。DateTime属性:

DateTime dateTime = dateTimeOffset.UtcDateTime;

.Net 4.6及以上版本请使用

DateTimeOffset.Now.ToUnixTimeSeconds()

目前您可以简单地使用

DateTimeOffset.UtcNow.ToUnixTimeMilliseconds()

它将以64位的形式返回

您实际上需要AddMilliseconds(毫秒),而不是seconds。添加秒会给你一个超出范围的异常。