【问题标题】:C# convert UTC int to DateTime objectC# 将 UTC int 转换为 DateTime 对象
【发布时间】:2011-09-27 17:53:45
【问题描述】:

我不知道为什么这么复杂!

我有一个插件传入一个 long int UTC。我需要将该号码转换为DateTime 以查询我的数据库(SQL Server)。

我不知道为什么,但我无法从基本的谷歌搜索中找到可行的答案。

(为了获得额外奖励,我需要在一天结束时将返回的DateTime 转换回 UTC。)

问这么基本的问题真尴尬! :)

【问题讨论】:

  • by UTC int,你的意思是自纪元以来的秒数?

标签: c# .net sql-server utc


【解决方案1】:

我的猜测是距离特定纪元(很可能是 1970 年 1 月 1 日午夜 UTC 的 Unix 纪元)将是毫秒或秒。

所以代码看起来像:

private static readonly DateTime UnixEpoch = new DateTime(1970, 1, 1, 0, 0, 0,
                                                          DateTimeKind.Utc);

public static DateTime FromMillisecondsSinceUnixEpoch(long milliseconds)
{
    return UnixEpoch.AddMilliseconds(milliseconds);
}

在几秒钟内做出明显的改变,或者从不同的时代:)

另一种方法是创建一个自纪元以来的秒/毫秒的TimeSpan,然后将其添加到纪元:

private static readonly DateTime UnixEpoch = new DateTime(1970, 1, 1, 0, 0, 0,
                                                          DateTimeKind.Utc);

public static DateTime FromMillisecondsSinceUnixEpoch(long milliseconds)
{
    return UnixEpoch + TimeSpan.FromMilliseconds(milliseconds);
}

我不知道它们之间有什么显着差异——尽管AddMilliseconds 采用double 而不是long 这一事实表明,对于非常大的值,TimeSpan 方法可能更可取。我怀疑它会有所作为:)

【讨论】:

    【解决方案2】:

    你得到的 int 是秒、毫秒还是什么?将其转换为刻度后,(一个 .NET 刻度为 100 纳秒)例如long ticks = theDBDateNum*TimeSpan.TicksPerMillisecond;,试试这个:

    DateTime theDate = new DateTime(ticks, DateTimeKind.Utc);
    

    【讨论】:

    • 这是假设一个与 .NET 相同的时代——根据我的经验,这似乎不太可能。
    • 是的。自纪元以来已经过去了几秒钟。
    【解决方案3】:

    根据https://www.epochconverter.com/

    Unix 纪元(或 Unix 时间或 POSIX 时间或 Unix 时间戳)是自 1970 年 1 月 1 日(UTC/GMT 午夜)以来经过的秒数,不包括闰秒。

    后来,

    var epoch = (DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalSeconds;
    

    稍后,

    private string epoch2string(int epoch) {
    return new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).AddSeconds(epoch).ToShortDateString(); }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-05
      • 2011-09-29
      • 2012-05-01
      • 2020-12-14
      • 1970-01-01
      • 2018-05-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多