c#转换UTC int到DateTime对象
本文关键字:DateTime 对象 int 转换 UTC | 更新日期: 2023-09-27 18:01:18
我不知道为什么这么复杂!
我有一个插件,正在传递一个长int UTC。我需要将该数字转换为DateTime
以查询我的数据库(SQL Server)。
我不知道为什么,但是我无法从基本的谷歌搜索中找到一个可行的答案。
(为了获得额外的学分,我需要在一天结束时将返回的DateTime
转换回UTC。)
问这样一个基本的问题真尴尬!:)
我猜它将是毫秒或秒从一个特定的纪元-很可能是Unix纪元1970年1月1日,午夜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);
}
在几秒钟内进行明显的更改,或者从不同的纪元开始:)
另一种方法是创建自epoch以来的秒/毫秒的TimeSpan
,然后将其添加到epoch:
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
方法可能更可取。但我怀疑它会有什么不同:)
你得到的是秒、毫秒还是什么?在将其转换为刻度(一个。net刻度是100纳秒)之后,例如通过long ticks = theDBDateNum*TimeSpan.TicksPerMillisecond;
,尝试如下:
DateTime theDate = new DateTime(ticks, DateTimeKind.Utc);
根据https://www.epochconverter.com/,
Unix纪元(或Unix时间或POSIX时间或Unix时间戳)是自1970年1月1日(午夜UTC/GMT)以来经过的秒数,不包括闰秒。
,
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(); }