我有两种不同的时间格式
dt0 = new DateTime(1970, 1, 1).ToLocalTime().AddSeconds(time_0) //(32-bits)
dt1 = new DateTime.FromFileTime(time_1) //(64-bits)
我需要找到这两次之间的差值。有没有办法在不将dt0
转换为64位的情况下执行此操作?
答案 0 :(得分:2)
您无需转换任何内容 - 无论您如何创建它们,都是DateTime
个对象。找出差异:
TimeSpan span = dt1 - dt0;
注意:internally日期存储为long
值,即自{0001} 1月1日午夜12:00:00起已过去的ticks
(100纳秒间隔)数字(好吧,刻度线为62位,日期类型为2位)。 Windows文件时间也以刻度来衡量,但它使用不同的起始点 - 公元1601年1月1日午夜12点(美国)协调世界时(UTC)。
var dt0 = new DateTime(1970, 1, 1);
dt0.Ticks // 621355968000000000 ticks number since 12:00:00 midnight, January 1, 0001
dt0.ToFileTime() // 116444664000000000 - I'll use this number later
请注意,从1601年1月1日午夜12点开始的刻度数小于0001年1月1日午夜12:00点的刻度数。
var dt1 = dt0.ToLocal();
dt1.Ticks // 621356040000000000 depends on time zone, mine is + 2 hours measured in ticks
var dt2 = dt1.AddSeconds(1);
dt2.Ticks // 621356040010000000 you have added 1s = 10000000 ticks
在最后一个示例中,我添加了第二个用整数表示的值,它将内部62位刻度值增加了10000000。
反之亦然 - 您可以使用二进制数据或Windows文件时间来初始化DateTime结构:
var dt3 = DateTime.FromFileTime(116444664000000000);
这会为d0
提供适当的时区偏移1970-01-01T00:00:00+02:00
答案 1 :(得分:0)
您可以使用TimeSpan对象
TimeSpan TimeDelta = new TimeSpan();
TimeDelta = dt0 - dt1;