首页 / .NET / 正文

[.NET/C#]C#程序开发中如何将一个unix时间戳和日期时间进行相互转换?

5090 发布于: 2018-01-29 读完约需8分钟

问题描述

如题,在C#程序开发中,我们如何将一个unix时间戳转换成对应的日期时间?
返过来,由日期时间转换成对应的unix时间戳又是如何实现呢?

方案一

由于时间戳转换成对应的日期时间:

public static DateTime UnixTimeStampToDateTime( double unixTimeStamp )
{
    // Unix timestamp is seconds past epoch
    System.DateTime dtDateTime = new DateTime(1970,1,1,0,0,0,0,System.DateTimeKind.Utc);
    dtDateTime = dtDateTime.AddSeconds( unixTimeStamp ).ToLocalTime();
    return dtDateTime;
}

方案二

在.NET 4.6或者以上版本中,内置了unix时间戳与日期时间的相互转换方法,比如:

将时间戳(秒)转换成DateTimeOffset:

DateTimeOffset dateTimeOffset = DateTimeOffset.FromUnixTimeSeconds(1000);

DateTimeOffset转换成秒数:

long unixTimeStampInSeconds = dateTimeOffset.ToUnixTimeSeconds();

将时间戳(毫秒)转换成DateTimeOffset:

DateTimeOffset dateTimeOffset = DateTimeOffset.FromUnixTimeMilliseconds(1000000);

DateTimeOffset转换成毫秒数:

long unixTimeStampInMilliseconds= dateTimeOffset.ToUnixTimeMilliseconds();

方案三

日期时间转换成时间戳(秒):

TimeSpan span = (DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0,DateTimeKind.Utc));
double unixTime = span.TotalSeconds;

方案四

时间戳转换成日期时间:

public static DateTime UnixTimestampToDateTime(double unixTime)
{
    DateTime unixStart = new DateTime(1970, 1, 1, 0, 0, 0, 0, System.DateTimeKind.Utc);
    long unixTimeStampInTicks = (long) (unixTime * TimeSpan.TicksPerSecond);
    return new DateTime(unixStart.Ticks + unixTimeStampInTicks, System.DateTimeKind.Utc);
}

日期时间转换成时间戳(秒):

public static double DateTimeToUnixTimestamp(DateTime dateTime)
{
    DateTime unixStart = new DateTime(1970, 1, 1, 0, 0, 0, 0, System.DateTimeKind.Utc);
    long unixTimeStampInTicks = (dateTime.ToUniversalTime() - unixStart).Ticks;
    return (double) unixTimeStampInTicks / TimeSpan.TicksPerSecond;
}

方案五

public static class EpochTimeExtensions
{
    public static long ToEpochTime(this DateTime dateTime)
    {
        var date = dateTime.ToUniversalTime();
        var ticks = date.Ticks - new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc).Ticks;
        var ts = ticks / TimeSpan.TicksPerSecond;
        return ts;
    }

    public static long ToEpochTime(this DateTimeOffset dateTime)
    {
        var date = dateTime.ToUniversalTime();
        var ticks = date.Ticks - new DateTimeOffset(1970, 1, 1, 0, 0, 0, TimeSpan.Zero).Ticks;
        var ts = ticks / TimeSpan.TicksPerSecond;
        return ts;
    }

    public static DateTime ToDateTimeFromEpoch(this long intDate)
    {
        var timeInTicks = intDate * TimeSpan.TicksPerSecond;
        return new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc).AddTicks(timeInTicks);
    }

    public static DateTimeOffset ToDateTimeOffsetFromEpoch(this long intDate)
    {
        var timeInTicks = intDate * TimeSpan.TicksPerSecond;
        return new DateTimeOffset(1970, 1, 1, 0, 0, 0, TimeSpan.Zero).AddTicks(timeInTicks);
    }
}

版权声明:本作品系原创,版权归码友网所有,如未经许可,禁止任何形式转载,违者必究。

上一篇: [.NET/C#]C#中如何对一个可枚举的泛型集合IEnumerable<T>进行动态排序呢?

下一篇: [.NET/C#]C#程序开发中如何将一个字符串转换成数据流?

本文永久链接码友网 » [.NET/C#]C#程序开发中如何将一个unix时间戳和日期时间进行相互转换?

分享扩散:

发表评论

登录用户才能发表评论, 请 登 录 或者 注册