Unix时间转换在C# [英] Unix time conversions in C#

查看:218
本文介绍了Unix时间转换在C#的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图在unix时间获得GMT。我使用以下代码:

 

public static long GetGMTInMS()
{
var unixTime = DateTime.Now.ToUniversalTime() -
new DateTime(1970,1,1,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} / p>

哪个是好的。那是我运行代码时的正确时间。我的问题是当我尝试将 1320249196267 加入unix时间转换器,如这个,它返回完全错误的时间。



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

解决方案

Unix时间戳表示自大多数情况下的时代而不是毫秒的 ...请小心!然而,像Java这样的东西,使用从时代开始的毫秒,这可能是你实际上关心的 - 尽管你所展示的工具。这真的取决于你需要什么。



此外,你不应该在当地时间做任何事情。



我会有:

  private静态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);
}


I am trying to get the GMT in unix time. I use the following code:


        public static long GetGMTInMS()
        {
            var unixTime = DateTime.Now.ToUniversalTime() -
                new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);

            return (long)unixTime.TotalMilliseconds;
        }

To then convert the unix time back to a DatTime object, I use this:


        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;
        }

When I run it, the GetGMTInMS() 1320249196267. When I pass it to UnixTimeStampToDateTime() I get {11/2/2011 11:53:16 AM}

Which is fine. That is the correct time fro when I ran my code. The issue I have is when I try and put 1320249196267 into an unix time converter, such as this, it returns the totally wrong time.

The other issue, is i am in the eastern time zone. This returned the time in my time zone. Is this something that the DateTime object handles or am I not getting the GMT.

解决方案

"Unix timestamp" means seconds since the epoch in most situations rather than milliseconds... be careful! However, things like Java use "milliseconds since the epoch" which may be what you actually care about - despite the tool you showed. It really depends on what you need.

Additionally, you shouldn't be doing anything with local time. Stick to universal time throughout.

I would have:

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时间转换在C#的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆