我正在尝试格式化一些精确的日期,将它们从Unix时间戳转换为DateTime对象。我注意到AddSeconds方法有一个接受浮点数的重载。
我的期望是我可以传入1413459415.93417
之类的数字,它会给我一个具有刻度级精度的DateTime对象。这是一个不错的假设,或does the AddSeconds method still provide no better than millisecond precision?
在转换中,我是否必须自己添加标记?
我的转换代码如下:
public static DateTime CalendarDateFromUnix(double unixTime)
{
DateTime calendarTime = UnixEpoch.AddSeconds(unixTime);
return calendarTime;
}
我希望使用下面的格式字符串格式化此日期的ToString,如16 Oct 2014 11:36:55.93417
:
dd MMM yyyy HH:mm:ss.fffff
而不是给我16 Oct 2014 11:36:55.93417
,它给了我16 Oct 2014 11:36:55.93400
我做错了什么或是.NET截断我的浮点秒表示?我是.NET的新手,所以前者很有可能。
由于
答案 0 :(得分:11)
来自DateTime.AddSeconds
的文档:
value参数四舍五入到最接近的毫秒。
另一种方法是乘以TimeSpan.TicksPerSecond
,然后将其添加到UnixEpoch
的刻度:
return new DateTime(
UnixEpoch.Ticks + (long) (unixTime * Timespan.TicksPerSecond),
DateTimeKind.Utc);