C#将UTC int转换为DateTime对象
我不知道这为什么这么复杂 我有一个插件正在传递一个长的int UTC。我需要将该数字转换为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
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(); }