给出代码
var dt = new DateTime(2015, 5, 6);
var ts = dt.Subtract(new DateTime(1601, 1, 1));
在此代码中考虑减去new DateTime(1601, 1, 1)
这是Windows FileTime的时代,是否有更好的方法来实现相同的行为?
答案 0 :(得分:2)
在内部,DateTime
表示为以刻度(100 ns间隔)测量的纪元的偏移量。虽然您的问题并不完全清楚,但您似乎希望将此偏移量设为TimeSpan
(可用于表示以刻度线测量的偏移量)。
DateTime
纪元是0001-01-01
(DateTime.MinValue
)。但是,您使用1601-01-01
。这是Windows文件时间的纪元,因此要获得与您要求相同的TimeSpan
,可以执行以下操作:
var ts = new TimeSpan(DateTime.Now.ToFileTime());
答案 1 :(得分:1)
正如Panagiotis Kanavos所说,也许你想用这个?
var timeSpan = new TimeSpan(fileTime);
或许你想这样减去DateTime.FromFileTime(0)
?
var timeSpan = DateTime.Now.Subtract(DateTime.FromFileTime(0));
或者您正在搜索Duration
方法?
如果您的TimeSpan值为负数,它将提供绝对值作为TimeSpan实例,如下例所示。
var format = "{0,22}{1,22}{2,22}";
var timeSpan = DateTime.Now.Subtract(new DateTime(1601, 1, 1));
Console.Write("TimeSpan: ");
Console.WriteLine(format, timeSpan);
Console.Write("Duration: ");
Console.WriteLine(format, timeSpan.Duration());
/* Console Output ------------------
TimeSpan: -00:00:00.1234567
Duration: 00:00:00.1234567
------------------ ------------------ */
答案 2 :(得分:1)
目前还不清楚实际问题是什么,所以我的猜测是:如何将文件时间刻度值转换为TimeSpan。
Windows文件时间是自1600-01-01以来的100ns间隔数。 TimeSpan是一个包装序列,即100ns间隔。您可以使用TimeSpan(Int64)构造函数从文件时间刻度值创建TimeSpan对象:
var ts= new TimeSpan(ticks);