c#中的Unix时间转换

本文关键字:转换 时间 Unix 中的 | 更新日期: 2023-09-27 18:13:32

我正在尝试获取unix时间的GMT。我使用以下代码:

<>之前 public static long GetGMTInMS() { var unixTime = DateTime.Now.ToUniversalTime() - new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); return (long)unixTime.TotalMilliseconds; } 之前

然后将unix时间转换回DatTime对象,我使用以下命令:<>之前 public static DateTime UnixTimeStampToDateTime(double unixTimeStamp) { System.DateTime dtDateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0); dtDateTime = dtDateTime.AddMilliseconds(unixTimeStamp).ToLocalTime(); return dtDateTime; } 之前

当我运行它时,GetGMTInMS() 1320249196267。当我把它传递给UnixTimeStampToDateTime()时,我得到{11/2/2011 11:53:16 AM}

这很好。这是我运行代码的正确时间。我遇到的问题是,当我尝试将1320249196267放入unix时间转换器时,例如这样,它返回完全错误的时间。

另一个问题是,我在东部时区。这将返回我所在时区的时间。这是DateTime对象处理的东西还是我没有得到GMT.

c#中的Unix时间转换

"Unix timestamp"表示自epoch在大多数情况下而不是毫秒…小心!然而,像Java这样的东西使用"自epoch以来的毫秒数",这可能是您实际上关心的—尽管您展示了工具。这完全取决于你需要什么。

此外,您不应该使用本地时间做任何事情。始终坚持通用时间。

我将有:

private static readonly DateTime UnixEpoch =
    new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
public static long GetCurrentUnixTimestampMillis()
{
    return (long) (DateTime.UtcNow - UnixEpoch).TotalMilliseconds;
}
public static DateTime DateTimeFromUnixTimestampMillis(long millis)
{
    return UnixEpoch.AddMilliseconds(millis);
}
public static long GetCurrentUnixTimestampSeconds()
{
    return (long) (DateTime.UtcNow - UnixEpoch).TotalSeconds;
}
public static DateTime DateTimeFromUnixTimestampSeconds(long seconds)
{
    return UnixEpoch.AddSeconds(seconds);
}

UNIX时间是从1970年1月1日开始的秒,而不是毫秒。将代码更改为使用秒而不是毫秒,它应该可以工作,