时间戳为UTC整数

时间:2009-03-13 10:41:14

标签: c# utc

HI

我有一个遗留数据库,其中的字段包含一个表示UTC日期时间的整数

从文档中: “CDR中的时间戳显示在通用协调时间(UTC)中。此值仍然存在 独立于夏令时变化“

值的示例是1236772829.

我的问题是将它转换为.NET DateTime(在CLR代码中,而不是在DB中)的最佳方法是什么,无论是UTC值还是本地时间值。

试图谷歌但没有运气。

提前致谢 /约翰

2 个答案:

答案 0 :(得分:4)

你需要知道整数的真正含义。这通常包括:

  • 一个纪元/偏移(即0意味着) - 例如“1970年1月1日午夜”
  • 比例尺,例如秒,毫秒,刻度。

如果您可以获得两个值以及它们在UTC方面的含义,其余的应该很容易。最简单的方法可能是使用DateTime(或DateTimeOffset)作为纪元,然后从整数构造TimeSpan,例如TimeSpan.FromMilliseconds等。将两者加在一起,你就完成了。编辑:根据aakashm's answer使用AddSecondsAddMilliseconds是一种更简单的方法:)

或者,自己动手并调用DateTime constructor which takes a number of ticks。 (可以说采用DateTimeKind的版本会更好,所以你可以明确说明它是UTC。)

答案 1 :(得分:3)

谷歌搜索确切的短语给了我this Cicso page,接着说“该字段指定从操作系统获得的time_t值。”

time_t是一个C库概念,严格来说不一定是任何特定的实现,但UNIX-y系统的通常将是自开始以来的秒数Unix时代,1970年1月1日00:00。

假设这是正确的,这段代码将从int:

给你一个DateTime
        DateTime epochStart = new DateTime(1970, 1, 1);

        int cdrTimestamp = 1236772829;

        DateTime result = epochStart.AddSeconds(cdrTimestamp);

        // Now result is 2009 March 11 12:00:29

你应该仔细检查你得到的结果,以确认这是对这些time_t的正确解释。