为了账号安全,请及时绑定邮箱和手机立即绑定

你如何转换C#中的时代时间?

你如何转换C#中的时代时间?

C#
呼唤远方 2019-06-28 17:00:16
你如何转换C#中的时代时间?如何转换unix?时代时间变成实时的C#?(1970年1月1日开始)
查看完整描述

3 回答

?
呼如林

TA贡献1798条经验 获得超3个赞

这个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);
  • DateTimeOffset

    以毫秒为单位的Unix时间:


long unixTimeStampInMilliseconds= dateTimeOffset.ToUnixTimeMilliseconds();

注意:这些方法相互转换DateTimeOffset..得到一个DateTime表示只需使用DateTimeOffset.DateTime财产:

DateTime dateTime = dateTimeOffset.UtcDateTime;


查看完整回答
反对 回复 2019-06-28
?
米脂

TA贡献1836条经验 获得超3个赞

为了便于使用,我为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带着KindUtc,这很好,但是上面ToUnixTime更令人怀疑的是,这并不能解释DateTime给出date是。允许dateKind任一UtcLocal,使用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(或UnspecifiedDateTimeUtc.

如果您不希望在从DATE时间迁移到另一个日期时创建EIRCHDATETIME实例,您也可以这样做:

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


查看完整回答
反对 回复 2019-06-28
  • 3 回答
  • 0 关注
  • 556 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信