从 FileTime 纪元到 TimeSpan 的 DateTime?
DateTime to TimeSpan from FileTime epoch?
给定代码
var dt = new DateTime(2015, 5, 6);
var ts = dt.Subtract(new DateTime(1601, 1, 1));
考虑到此代码中有一个 new DateTime(1601, 1, 1)
的减法,它是 Windows FileTime 的纪元,是否有更好的方法来实现相同的行为?
在内部,DateTime
表示为以刻度(100 ns 间隔)测量的纪元的偏移量。虽然您的问题并不完全清楚,但您似乎希望将此偏移量作为 TimeSpan
(可用于表示以滴答为单位测量的偏移量)。
DateTime
纪元是 0001-01-01
(DateTime.MinValue
)。但是,您使用 1601-01-01
。这是 Windows 文件时间的纪元,因此要获得与您要求的相同的 TimeSpan
,您可以执行以下操作:
var ts = new TimeSpan(DateTime.Now.ToFileTime());
正如 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
------------------ ------------------ */
不清楚实际问题是什么,所以这是我的猜测:How to convert a file time tick value to a TimeSpan。
Windows 文件时间是自 1600-01-01 以来 100ns 间隔的数量。 TimeSpan 是对滴答的包装,即 100ns 间隔。您可以使用 TimeSpan(Int64) 构造函数从文件时间刻度值创建一个 TimeSpan 对象:
var ts= new TimeSpan(ticks);
给定代码
var dt = new DateTime(2015, 5, 6);
var ts = dt.Subtract(new DateTime(1601, 1, 1));
考虑到此代码中有一个 new DateTime(1601, 1, 1)
的减法,它是 Windows FileTime 的纪元,是否有更好的方法来实现相同的行为?
在内部,DateTime
表示为以刻度(100 ns 间隔)测量的纪元的偏移量。虽然您的问题并不完全清楚,但您似乎希望将此偏移量作为 TimeSpan
(可用于表示以滴答为单位测量的偏移量)。
DateTime
纪元是 0001-01-01
(DateTime.MinValue
)。但是,您使用 1601-01-01
。这是 Windows 文件时间的纪元,因此要获得与您要求的相同的 TimeSpan
,您可以执行以下操作:
var ts = new TimeSpan(DateTime.Now.ToFileTime());
正如 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
------------------ ------------------ */
不清楚实际问题是什么,所以这是我的猜测:How to convert a file time tick value to a TimeSpan。
Windows 文件时间是自 1600-01-01 以来 100ns 间隔的数量。 TimeSpan 是对滴答的包装,即 100ns 间隔。您可以使用 TimeSpan(Int64) 构造函数从文件时间刻度值创建一个 TimeSpan 对象:
var ts= new TimeSpan(ticks);