【问题标题】:How to convert nanoseconds to local DateTimeOffset in C#?如何在 C# 中将纳秒转换为本地 DateTimeOffset?
【发布时间】:2020-01-09 14:33:51
【问题描述】:

如何将纳秒转换为Datetimeoffset

我试过日期时间

long nanoseconds = 1449491983090000000;
DateTime epochTime = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Local);
DateTime result1 = epochTime.AddTicks(nanoseconds / 100);

DateTime epochTimfe = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
DateTime result2 = epochTime.AddTicks(nanoseconds / 100);

result1result2 都给了我 GMT 时间。即,

2015 年 12 月 7 日下午 12:39:43

我从here验证了这一点

谁能帮我把纳秒转换成DateTimeOffset

【问题讨论】:

  • 你可以尝试使用DateTimeOffset.FromUnixTimeMilliseconds的方法,添加看这个线程How can I convert a Unix timestamp to DateTime and vice versa?
  • 纳秒是一个时间单位。 DateTimeOffsets 表示时间的瞬间(具有关联的时区)。您要问的是“我想从公里转换为位置”。如果你确定一个起始位置和一个方向(这对于时间来说不是必需的,只有一个方向),你可以做到,但你需要一个起点(时间跨度中的一个纪元)。您可以很容易地从纳秒获得 TimeSpan。如果您将其添加到开始的 dateTimeOffset,您应该参加比赛
  • 另外,一旦你确实有一个正确的DateTime(通过任何方法),你可以简单地将它传递给DateTimeOffset构造函数并获取它的.ToLocalTime()。这要求DateTimeKind 是正确的。

标签: c# datetime datetimeoffset


【解决方案1】:

您可以在 UTC 中构造一个 DateTimeOffset 的实例,添加纳秒,然后调用 ToLocalTime 以获取本地版本。

long nanoseconds = 1449491983090000000;
var epochTime = new DateTimeOffset(1970, 1, 1, 0, 0, 0, TimeSpan.Zero);
var utc = epochTime.AddTicks(nanoseconds / 100);
var local = utc.ToLocalTime();

【讨论】:

    猜你喜欢
    • 2017-06-19
    • 2015-11-14
    • 2017-06-19
    • 1970-01-01
    • 2018-03-15
    • 2017-12-06
    • 2016-07-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多