你如何在C#中转换时代?

你如何将Unix纪元时间转换为C#中的实时? (从1970年1月1日开始)


我认为你的意思是Unix时间,它定义为自1970年1月1日午夜(UTC)以来的秒数。

public static DateTime FromUnixTime(long unixTime)
{
    return epoch.AddSeconds(unixTime);
}
private static readonly DateTime epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);

凭借对LukeH的所有荣誉,我已经将一些扩展方法放在一起以便于使用:

public static DateTime FromUnixTime(this long unixTime)
{
    var epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
    return epoch.AddSeconds(unixTime);
}

public static long ToUnixTime(this DateTime date)
{
    var epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
    return Convert.ToInt64((date - epoch).TotalSeconds);
}

注意下面从CodesInChaos注释,上面FromUnixTime返回DateTimeKindUtc ,这是很好的,但上面ToUnixTime更加犯罪嫌疑人在不占什么样的DateTime给定的date是。 要允许dateKindUtcLocal ,请使用ToUniversalTime

public static long ToUnixTime(this DateTime date)
{
    var epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
    return Convert.ToInt64((date.ToUniversalTime() - epoch).TotalSeconds);
}

ToUniversalTime会将Local (或未UnspecifiedDateTime转换为Utc

如果您不想在从DateTime移至时代时创建新纪元DateTime实例,则还可以执行以下操作:

public static long ToUnixTime(this DateTime date)
{
    return (date.ToUniversalTime().Ticks - 621355968000000000) / 10000000;
}

最新版本的.Net(v4.6)只是增加了对Unix时间转换的内置支持。 这包括来自和来自Unix时间的时间,以秒或毫秒表示。

  • Unix时间在几秒钟内到DateTimeOffset
  • DateTimeOffset dateTimeOffset = DateTimeOffset.FromUnixTimeSeconds(1000);
    
  • 以秒为单位的DateTimeOffset到Unix时间:
  • long unixTimeStampInSeconds = dateTimeOffset.ToUnixTimeSeconds();
    
  • Unix时间以毫秒为单位DateTimeOffset
  • DateTimeOffset dateTimeOffset = DateTimeOffset.FromUnixTimeMilliseconds(1000000);
    
  • Unix时间的DateTimeOffset以毫秒为单位:
  • long unixTimeStampInMilliseconds= dateTimeOffset.ToUnixTimeMilliseconds();
    

    注意:这些方法转换为和来自DateTimeOffset 。 要获取DateTime表示,只需使用DateTimeOffset.DateTime属性:

    DateTime dateTime = dateTimeOffset.UtcDateTime;
    
    链接地址: http://www.djcxy.com/p/18483.html

    上一篇: How do you convert epoch time in C#?

    下一篇: Why is 1/1/1970 the "epoch time"?