你如何在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