将纳秒转换为日期时间

本文关键字:日期 时间 转换 | 更新日期: 2023-09-27 18:26:07

我在将纳秒转换为DateTime时遇到了一些困难,因此我可以使用Google Fit API(https://developers.google.com/fit/rest/v1/reference/users/dataSources/datasets/get)

数据集标识符,它是最小数据点起点的组合时间和最大数据点结束时间,表示为从时代。ID的格式类似于:"startTime-endTime",其中startTime和endTime是64位整数。

我能够通过这种方式将日期时间转换为纳秒

DateTime zuluTime = ssDatetime.ToUniversalTime();
DateTime unixEpoch = new DateTime(1970, 1, 1);
ssNanoSeconds = (Int32)(zuluTime.Subtract(unixEpoch)).TotalSeconds + "000000000";

但现在我需要将纳秒转换为DateTime。我该怎么做?

将纳秒转换为日期时间

使用AddTicks方法。不要忘记用纳秒除以100来得到刻度。

long nanoseconds = 1449491983090000000;
DateTime epochTime = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
DateTime result = epochTime.AddTicks(nanoseconds / 100);

Ticks属性表示100纳秒。那么:怎么样

 var ssNanoSeconds = ((zuluTime.Subtract(unixEpoch)).Ticks / 100)

从纳秒到DateTime

 DateTime dateTime = new DateTime(1970, 1, 1).AddTicks(nanoSeconds * 100) ; 

要将纳秒转换为DateTime对象,可以执行以下操作:

将纳秒值除以1000000000,得到等效的秒数。创建一个表示Unix epoch(1970年1月1日)的DateTime对象。将秒数添加到Unix epoch以获得所需的DateTime对象。

long nanoseconds = 1234567890123; // nanoseconds value to convert
// Divide the nanoseconds value by 1,000,000,000 to get the equivalent number of seconds
int seconds = (int)(nanoseconds / 1000000000);
// Create a DateTime object representing the Unix epoch (January 1, 1970)
DateTime unixEpoch = new DateTime(1970, 1, 1);
// Add the number of seconds to the Unix epoch to get the desired DateTime object
DateTime datetime = unixEpoch.AddSeconds(seconds);

请注意,只有当纳秒值在DateTime对象可以表示的值范围内(大约在Unix epoch之前或之后2.92亿年)时,这才会正确工作。如果纳秒值超出此范围,则生成的DateTime对象将不准确。