时间戳为UTC整数

问题描述 投票:0回答:2

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

文件中说:"CDR内的时间戳以世界协调时间(UTC)显示。该值不受夏令时变化的影响"。

一个值的例子是1236772829。

我的问题是,将其转换为.NET DateTime(在CLR代码中,而不是在DB中)的最佳方法是什么,既可以作为UTC值,也可以作为本地时间值。

我试着在谷歌上搜索,但没有任何收获。

c# utc
2个回答
3
投票

在谷歌上搜索这句话,得到的结果是:"在CDR中的时间戳是以统一协调时间(UTC)显示的。此Cicso页面,它接着说:"该字段指定了一个从操作系统获得的time_t值。"

时间_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_ts.


4
投票

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

  • 一个ochoffset (即0的意思) - 例如 "1970年1月1日午夜"
  • 一个刻度,例如:秒、毫秒、滴答。

如果你能得到两个值以及它们在UTC方面的含义,剩下的应该很容易。最简单的方法可能是有一个 DateTime (或 DateTimeOffset)作为纪元,然后构建一个 TimeSpan 从整数,如 TimeSpan.FromMilliseconds 等。将两者相加就可以了。EDIT: 使用 AddSecondsAddMilliseconds 按照 阿卡什姆的回答 是一个更简单的方法来完成这一点 :)

或者,你可以自己进行运算,然后调用 DateTime 构造函数. (可以说,这个版本采取的是 DateTimeKind 以及会更好,所以你可以明确地说明它是UTC)。)

© www.soinside.com 2019 - 2024. All rights reserved.