C# 将 UTC int 转换为 DateTime 对象

标签 c# .net sql-server utc

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

我有一个插件正在传递一个 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/

相关文章:

时间:2019-03-17 标签:c#genericsqlcontextparameter

c# - 如何使用 C# 复制 Azure Data Lake Store 中的文件

c# - 是否有必要模拟单元测试中的所有依赖项?

c# - 测试使用多个调度程序的代码的技术

c# - EF Core Linq 使用方法语法加入 OR 条件

SQL Server : Average counts by hour and day of week

c# - 使用 'space' 分隔的属性名称反序列化 JSON

c# - 将一行 python 代码列表理解/叉积(将扑克牌创建为两个字符串 : rank, 套件的列表)转换为 C#

c# - 为什么类 Type 不是密封的,我能用它做什么?

sql - 尝试从一个表中检查另一个表中的数据