你如何在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返回DateTime与Kind的Utc ,这是很好的,但上面ToUnixTime更加犯罪嫌疑人在不占什么样的DateTime给定的date是。 要允许date的Kind为Utc或Local ,请使用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 (或未Unspecified ) DateTime转换为Utc 。
如果您不想在从DateTime移至时代时创建新纪元DateTime实例,则还可以执行以下操作:
public static long ToUnixTime(this DateTime date)
{
return (date.ToUniversalTime().Ticks - 621355968000000000) / 10000000;
}
最新版本的.Net(v4.6)只是增加了对Unix时间转换的内置支持。 这包括来自和来自Unix时间的时间,以秒或毫秒表示。
DateTimeOffset : DateTimeOffset dateTimeOffset = DateTimeOffset.FromUnixTimeSeconds(1000);
DateTimeOffset到Unix时间: long unixTimeStampInSeconds = dateTimeOffset.ToUnixTimeSeconds();
DateTimeOffset : DateTimeOffset dateTimeOffset = DateTimeOffset.FromUnixTimeMilliseconds(1000000);
DateTimeOffset以毫秒为单位: long unixTimeStampInMilliseconds= dateTimeOffset.ToUnixTimeMilliseconds();
注意:这些方法转换为和来自DateTimeOffset 。 要获取DateTime表示,只需使用DateTimeOffset.DateTime属性:
DateTime dateTime = dateTimeOffset.UtcDateTime;
链接地址: http://www.djcxy.com/p/18483.html
