📜  c# datetime to timestamp - C# (1)

📅  最后修改于: 2023-12-03 15:13:48.752000             🧑  作者: Mango

C# DateTime 转 Unix 时间戳

有时候我们需要在 C# 代码中将 DateTime 类型转换为 Unix 时间戳。此时可以使用以下方法:

public static long ConvertToTimestamp(DateTime value)
{
    var epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
    var elapsedTime = value.ToUniversalTime() - epoch;
    return (long)elapsedTime.TotalSeconds;
}

这个方法将接收一个 DateTime 类型的参数,并返回一个 Int64 类型的 Unix 时间戳,单位为秒。

在这个方法中,我们首先定义了一个表示 Unix 纪元时间的 DateTime 实例。在这个方法中,我们使用了 ToUniversalTime() 方法将传入的时间转换为 UTC 时间,以便在计算时间戳之前将其与 Unix 时间戳的 UTC 基准时间(1970 年 1 月 1 日)对齐。

如果要转换当前时间,则可以使用以下方式:

var unixTimestamp = ConvertToTimestamp(DateTime.Now);

这将返回当前时间的 Unix 时间戳。

注意:Unix 时间戳是以 UTC 标准时间为基准的。如果你需要基于本地时区计算 Unix 时间戳,则可以使用以下代码:

public static long ConvertToTimestamp(DateTime value)
{
    return (long)value
        .ToUniversalTime()
        .Subtract(new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc))
        .TotalSeconds;
}

在这个方法中,我们先使用 ToUniversalTime() 将本地时间转换为 UTC 时间,然后再计算时间戳。

请注意,如果要将 Unix 时间戳转换回 C# 的 DateTime 类型,则需要使用以下方式:

public static DateTime ConvertFromTimestamp(long timestamp)
{
    var epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
    return epoch.AddSeconds(timestamp);
}

这将接收一个 Int64 类型的 Unix 时间戳,返回对应的 DateTime 类型。