将ticks转换为DateTime

6

这个网站上有很多关于如何做到这一点的问题。我的问题是当我按照似乎适用于其他人的方法进行操作时,无法得到正确的日期或时间。代码如下...

long numberOfTicks = Convert.ToInt64(callAttribute);
startDateTime = new DateTime(numberOfTicks);
callAttribute的值为"1379953111"。
将其转换后,numberOfTicks的值为1379953111。
但是,DateTime最终变成了startDateTime = {1/1/0001 12:02:17 AM}
我已经使用相同的ticks值在线上进行了转换,得到了正确的日期/时间。
我做错了什么?

你期望得到什么值? - Anthony
可能是如何将UNIX时间戳转换为DateTime和反之亦然?的重复问题。 - Dustin Kingen
这是一个滴答数,与秒数无关。我期望的日期/时间是2013年9月23日09:18:31。如果我将这个数字输入到Epoch Converter中,我会收到正确的日期/时间返回。 - Gary
1
是什么让你相信这是Ticks呢?我认为,将该值视为通用的“自Unix纪元以来的秒数”并赋予正确值,这可能是个巧合,但它实际上是Ticks数量的话,那就太棒了。 - Jon Skeet
@Gary:Epoch Converter使用自Unix纪元以来的秒数或毫秒数。 - Jon Skeet
谢谢,我以为它使用 ticks。 - Gary
1个回答

20

你的值似乎不是一个刻度数;我猜测它可能是一个UNIX时间戳(自1970年01月01日UTC以来的秒数)

这是一个将UNIX时间戳转换的函数:

static readonly DateTime _unixEpoch =
    new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);

public static DateTime DateFromTimestamp(long timestamp)
{
    return _unixEpoch.AddSeconds(timestamp);
}

2
为了避免人们不得不检查,问题的值 1379953111 将返回 9/23/2013 4:18:31 PM,这明确指向这是正确答案,假设用户最近使用了 'DateTime.Now' 或类似的函数,并且他可能处于不同的时区或相差几个小时。 - Anthony
2
你应该将Unix纪元的“kind”指定为Utc,因为这就是Unix纪元的定义方式。 - Jon Skeet

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接