你如何在C#中转换纪元时间?如何在C#中将Unix 纪元时间转换为实时?(Epoch开始于1970年1月1日)
3 回答
GCT1015
TA贡献1827条经验 获得超4个赞
在最新版本的.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
。要获得DateTime
表示,只需使用该DateTimeOffset.DateTime
属性:
DateTime dateTime = dateTimeOffset.UtcDateTime;
喵喔喔
TA贡献1735条经验 获得超5个赞
由于归功于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
将a Local
(或Unspecified
)转换DateTime
为Utc
。
如果你不想在从DateTime移动到epoch时创建epoch DateTime实例,你也可以这样做:
public static long ToUnixTime(this DateTime date){ return (date.ToUniversalTime().Ticks - 621355968000000000) / 10000000;}
- 3 回答
- 0 关注
- 247 浏览
添加回答
举报
0/150
提交
取消