我不知道为什么这么复杂!
我有一个插件正在传递一个 long int UTC。我需要将该数字转换为 DateTime
以查询我的数据库 (SQL Server)。
我不知道为什么,但我无法从基本的谷歌搜索中找到可行的答案。
(为了获得额外的积分,我需要在一天结束时将返回的 DateTime
变回 UTC。)
问这样一个基本问题真是令人尴尬! :)
最佳答案
我的猜测是自某个特定纪元以来的毫秒数或秒数 - 很可能是 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
方法可能更可取。不过,我怀疑这会有什么不同:)
关于C# 将 UTC int 转换为 DateTime 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6565023/