我想找到两个DateTime对象之间的区别。我知道我可以使用DateTime.Subtract()和重载运算符'-'(例如DateTime-DateTime)。但是有人告诉我这两种技术还不够好,还有DateDiff之类的方法,我应该使用并且最好使用。我想知道这是真的吗?如果是的话,那么从任何角度看,以上两个都不如?
答案 0 :(得分:2)
DateDiff
不比较dateTime
实例。
它比较DateTime实例的特定部分-例如,月份或小时。
例如:
var lasyDayOf2018 = new DateDime(2018, 12, 31);
var firstDayOf2019 = lasyDayOf2018.AddDays(1);
var monthDiff = DateDiff(DateInterval.Month, lasyDayOf2018, firstDayOf2019)
monthDiff将为1,即使两个日期之间只有一天。
它记录在DateDiff
文档页面的“备注”部分:
如果将Interval设置为DateInterval.Year,则返回值将完全根据Date1和Date2的年份部分计算得出。同样,DateInterval.Month的返回值完全是根据参数的年和月部分计算得出的,DateInterval.Quarter的返回值是根据包含两个日期的季度计算得出的。
例如,当将12月31日与第二年的1月1日进行比较时,即使最多仅经过一天,DateDiff也会为DateInterval.Year,DateInterval.Quarter或DateInterval.Month返回1。
要获取DateTime
不同实例之间的实际差异,请使用Subtract
或-
,如您在问题中所写。
答案 1 :(得分:1)
是否存在问题,该问题的解决方案实际上取决于情况以及您为何计算差异。 DateTime.Subtract()
和operator -
存在两个主要问题。
第一个是它们都忽略了数据的时区部分。因此,例如,如果您有两个日期,即2019-07-18 12:00:00 UTC和2019-07-18 06:00:00 MDT(本地时间),即使它们表示同一时间(如(来自不同时区的时间),DateTime.Subtract()
会告诉您它们相距6个小时。
第二个问题是,您经常想知道除刻度以外的其他单位的答案,有时甚至是一些无法转换为固定刻度数的东西。例如,如果您想要两个DateTime
所代表的月份中的差异,则无法根据滴答声的差异(这是DateTime.Subtract()
的基础)进行计算,因为不同月份的长度不同。例如,对于日期“ 2019-06-30 23:59:59”和“ 2019-07-01 00:00:00”(在同一时区),仅相差一秒,但月份为不同,那么月份的差值是零还是零?这取决于您要使用答案的方式。