将本地时间(10位数字)转换为可读的日期时间格式。

9
我正在处理pbx的voip通话。PBX的一个方面是您可以选择接收CDR包。这些包含有2个时间戳:“utc”和“local”,但两者似乎总是相同的。
以下是时间戳的示例:“1268927156”。
乍一看,它似乎没有任何逻辑。因此,我尝试了几种转换方式,但结果不佳。该值应提供今天上午11点左右(+1GMT)的时间。
我尝试过以下方法:
  • Datetime dt = new Datetime(number);
  • Timespan ts = new Timespan(number);
  • DateTime utc = new DateTime(number + 504911232000000000, DateTimeKind.Utc)
还有其他一些我现在记不起来了。
我是否错过了什么愚蠢的东西?
提前感谢您。

这些类没有ToString或Format方法吗? - lexu
4个回答

16

这看起来像是Unix时间。

1268927156 = Thu, 18 Mar 2010 15:45:56 GMT

还有一个代码示例:

DateTime startDate = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
DateTime time = startDate.AddSeconds(1268927156 );

3

看起来是Unix时间戳(自纪元以来的秒数)

DateTime translated = new DateTime(1970,1,1).AddSeconds(1268927156);

应该会给你想要的日期和时间...


2

看起来这是一个Unix时间戳,它表示从1970年1月1日开始的秒数。

DateTime dt = new DateTime(1970, 1, 1, 0, 0, 0, 0).AddSeconds(1268927156);

如果utc和本地时间戳相同,则表示您的PBX时区设置为UTC,您的时间戳确实是UTC,或者时区设置为UTC但时间设置为本地时间,因此两个时间戳都显示本地时间。您需要确定其中哪一个情况,以便知道是否需要将时间戳转换为UTC。

1

我猜这是一个UNIX时间戳,其逻辑如下:

UNIX时间戳代表自 Unix 纪元(1970年1月1日 00:00:00 GMT)以来以秒为单位测量的时间

有一篇codeproject文章解释了转换。基本上你需要做的是:

// First make a System.DateTime equivalent to the UNIX Epoch.
System.DateTime dateTime = new System.DateTime(1970, 1, 1, 0, 0, 0, 0);
// Add the number of seconds in UNIX timestamp to be converted.
dateTime = dateTime.AddSeconds(timestamp);

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