C#将UTC int转换为DateTime对象

Mat*_* H. 7 .net c# sql-server utc

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

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

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

(为了额外的功劳,我需要DateTime在一天结束时将我的返回信号转回UTC.)

不得不提出这样一个基本问题,这很令人尴尬!:)

Jon*_*eet 22

我的猜测是,从特定时代开始,它将是毫秒或秒 - 很可能是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);
}
Run Code Online (Sandbox Code Playgroud)

几秒钟或者从不同的时代做出明显的变化:)

另一种方法是创建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);
}
Run Code Online (Sandbox Code Playgroud)

我不知道它们之间有任何显着差异 - 尽管AddMilliseconds采用一个double而不是一个事实long表明,对于非常大的值,该TimeSpan方法可能更可取.我怀疑它会有什么不同虽然:)


Tim*_* S. 10

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

DateTime theDate = new DateTime(ticks, DateTimeKind.Utc);
Run Code Online (Sandbox Code Playgroud)