8

我正在使用 pbx 进行 voip 通话。pbx 的一个方面是您可以选择接收 CDR 包。这些包有 2 个时间戳:“utc”和“local”,但两者似乎总是相同的。

这是时间戳的示例:“1268927156”。

乍一看,似乎没有逻辑。所以我尝试了几种方式转换它,但没有好的结果。该值应提供今天上午 11 点 (+1GMT) 左右的时间。

我尝试过的事情:

  • 日期时间 dt = 新日期时间(数字);
  • 时间跨度 ts = 新的时间跨度(数字);
  • DateTime utc = new DateTime(number + 504911232000000000, DateTimeKind.Utc)

还有一些我现在不记得了。

我在这里错过了什么愚蠢的东西吗?

提前致谢

4

4 回答 4

15

这看起来像Unix时间。

1268927156 = 2010 年 3 月 18 日星期四 15:45:56 GMT

和一个代码示例:

DateTime startDate = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
DateTime time = startDate.AddSeconds(1268927156 );
于 2010-03-19T13:47:45.690 回答
3

似乎是一个 Unix 时间戳(自纪元以来的秒数)

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

应该给你你之后的日期和时间......

于 2010-03-19T13:49:20.987 回答
2

这看起来像一个unix时间戳,这是没有的。自 1970 年 1 月 1 日以来的秒数。

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

如果 UTC 和本地时间戳相同,则您的 PBX 上的时区设置为 UTC,而您的时间戳确实是 UTC,或者时区设置为 UTC,但时间设置为您的本地时间,您将获得两个时间戳的当地时间。您必须弄清楚其中的哪一个,这样您才能知道是否要从 UTC 转换时间戳。

于 2010-03-19T13:53:13.987 回答
1

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

UNIX 时间戳表示自 Unix 纪元(格林威治标准时间 1970 年 1 月 1 日 00:00:00)以来以秒为单位测量的时间

有一篇解释转换的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);
于 2010-03-19T13:50:52.120 回答