Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#将UTC int转换为DateTime对象_C#_.net_Sql Server_Utc - Fatal编程技术网

C#将UTC int转换为DateTime对象

C#将UTC int转换为DateTime对象,c#,.net,sql-server,utc,C#,.net,Sql Server,Utc,我不知道这为什么这么复杂 我有一个插件正在传递一个长的int UTC。我需要将该数字转换为DateTime以查询我的数据库(SQL Server) 我不知道为什么,但我无法从基本的谷歌搜索中找到可行的答案 (为了获得额外积分,我需要在一天结束时将返回的DateTime转换回UTC。) 要问这样一个基本的问题真是令人尴尬!:) 你得到的整数是秒、毫秒还是什么?将其转换为滴答声后,(一个.NET滴答声为100纳秒),例如,通过long ticks=theDBDateNum*TimeSpan.tick

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

我有一个插件正在传递一个长的int UTC。我需要将该数字转换为
DateTime
以查询我的数据库(SQL Server)

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

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


要问这样一个基本的问题真是令人尴尬!:)

你得到的整数是秒、毫秒还是什么?将其转换为滴答声后,(一个.NET滴答声为100纳秒),例如,通过
long ticks=theDBDateNum*TimeSpan.tickspermillsecond,请尝试以下操作:

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

我的猜测是,从一个特定的纪元开始,它将是毫秒或秒——很可能是1970年1月1日的Unix纪元,UTC午夜

所以代码看起来像:

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);
}
我不知道它们之间有什么显著的区别-尽管
addmillizes
需要
double
而不是
long
这一事实表明,对于非常大的值,
TimeSpan
方法可能更可取。不过我怀疑这会有什么不同:)根据

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

后来呢,

后来呢,


UTC int是指从纪元开始的秒数?这是假设纪元与.NET纪元相同-根据我的经验,这似乎不太可能。是的。从大纪元开始已经过去几秒钟了。
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(); }