如何将unix时间戳转换为datetime

时间:2015-02-03 17:33:10

标签: c# datetime unix-timestamp

我正在尝试转换此unix时间戳 的 1415115303410 在DateTime中,以这种方式:

private static DateTime UnixTimeStampToDateTime(long unixTimeStamp)
{
        System.DateTime dtDateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0, System.DateTimeKind.Utc);
        dtDateTime = dtDateTime.AddMilliseconds(unixTimeStamp);
        return dtDateTime;
}

但是我得错了日期: 日期:{04/11/0045 00:00:00}

注意: dtDateTime.AddSeconds(unixTimeStamp)会抛出异常..我的号码以毫秒为单位。

使用此在线转化工具http://www.epochconverter.com/我获得了正确的转换:

04/11/2014 15:35:03 GMT + 0:00

我如何转换这个?

8 个答案:

答案 0 :(得分:10)

您的代码工作正常,原样。这是fiddle

告诉您使用AddSeconds的每个人都错了。你给我们的数字显然是毫秒。一年有31,536,000秒。 1415115303410除以31536000是4487.自1970年1月1日以来还没有4,487年过去。

答案 1 :(得分:7)

使用AddSeconds而不是AddMilliseconds

 private static DateTime UnixTimeStampToDateTime(long unixTimeStamp) 
 {
    System.DateTime dtDateTime = new System.DateTime(1970, 1, 1, 0, 0, 0, 0);
    dtDateTime = dtDateTime.AddSeconds(unixTimeStamp);
    return dtDateTime;
 }

答案 2 :(得分:4)

只需使用DateTimeOffset

DateTimeOffset date = DateTimeOffset.FromUnixTimeSeconds(1415115303410)

答案 3 :(得分:2)

public DateTime FromUnixTime(long unixTime)
{
    var epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
    return epoch.AddMilliseconds(unixTime);
}

var date = FromUnixTime(1415115303410); // 11/4/2014 3:35:03 PM

由于您的号码是以毫秒Unix time为单位,因此请使用AddMilliseconds

答案 4 :(得分:1)

试试这个

DateTime date = new DateTime(Convert.ToInt64("1415115303410"));

答案 5 :(得分:1)

微软继续考虑我们!添加秒/毫秒的所有解决方案都不适用于Visual Studio 2017(.Net 4.6.1)。但是有一个新的解决方案:

public static DateTime numStrToDate(String val)
{
    DateTime dRet = new DateTime(1970, 1, 1, 0, 0, 0, 0);
    long dSec;
    if (long.TryParse(val, out dSec))
    {
        TimeSpan ts = new TimeSpan(dSec*10l);
        dRet = dRet.Add(ts);
    }
    return dRet;
}

如果您需要UTC时间 - 只需添加' System.DateTimeKind.Utc'到DateTime构造函数调用。

答案 6 :(得分:0)

日期到时间戳

 DateTime date = DateTime.ParseExact(date_string, "dd/MM/yyyy H:mm:ss", null);
 Double timestamp = Math.Truncate((date.ToUniversalTime().Subtract(new DateTime(1970, 1, 1))).TotalSeconds);

到目前为止的时间戳

 DateTime dtDateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0, System.DateTimeKind.Unspecified);
 dtDateTime = dtDateTime.AddSeconds(Double.Parse(arrayFinalResponse[i, 5])).ToLocalTime();
 String date = dtDateTime.ToString("dd/MM/yyyy H:mm:ss", CultureInfo.GetCultureInfo("en-US"));

答案 7 :(得分:-1)

您可以通过对date命令使用一些技巧来进行转换。 它确实取决于您的时区。我住在UTC + 1,所以对我来说是这样的:

h1x1binax:~ # date -d "Thu Jan  1 01:00:00 CET 1970 + 1415115303410 second"
Thu Mar 21 09:16:50 CET 46813
h1x1binax:~ #

所以这不是unixtime时间戳...可能以毫秒为单位,因此需要除以1000

h1x1binax:~ # date -d "Thu Jan  1 01:00:00 CET 1970 + 1415115303 second"
Tue Nov  4 16:35:03 CET 2014
h1x1binax:~ #