Ios 计算年、月、日和忽略时间中两个NSDate之间的差异?
举个例子,我有两个Ios 计算年、月、日和忽略时间中两个NSDate之间的差异?,ios,objective-c,nsdate,nscalendar,Ios,Objective C,Nsdate,Nscalendar,举个例子,我有两个NSDate在同一时区UTC NSDate *date1 = [NSDate dateWithString:@"2019-05-31 22:00:00 +0000"]; NSDate *date2 = [NSDate dateWithString:@"2019-06-01 01:00:00 +0000"]; 我想做一个函数来计算年、月、日和忽略时间部分之间的差异。上述预期结果 年份:0 月份:1 日期:1 或者另一个例子 NSDate
NSDate
在同一时区UTC
NSDate *date1 = [NSDate dateWithString:@"2019-05-31 22:00:00 +0000"];
NSDate *date2 = [NSDate dateWithString:@"2019-06-01 01:00:00 +0000"];
我想做一个函数来计算年、月、日和忽略时间部分之间的差异。上述预期结果
年份:0
月份:1
日期:1
或者另一个例子
NSDate *date1 = [NSDate dateWithString:@"2019-02-28 22:00:00 +0000"];
NSDate *date2 = [NSDate dateWithString:@"2020-03-01 01:00:00 +0000"];
会有结果的
年份:1
月份:13
日期:367
我试过这个问题的答案
但是那些使用NSTimeInterval
的方法似乎不可靠,因为一年中有365天或366天,并且不忽略时间。回答像
NSDateComponents *components;
NSInteger days;
components = [[NSCalendar currentCalendar] components: NSDayCalendarUnit
fromDate: date1 toDate: date2 options: 0];
days = [components day];
也给出错误的结果。您可以使用
NSCalendar
的组件时区:fromDate:
方法将每个NSDate
值转换为NSDateComponents
值。这将为您提供两个日期的年、月和日值,现在实现您的差分算法,可能是:
- 从较大的日期中减去较早的日期-您可以通过比较两个
值来确定NSDate
- 年份差异只是
值的年份分量的简单减法NSDateComponents
- 月差是月组成部分之间的差,如果为负,则加12
- 日差是相似的,但在负的情况下,您必须添加月长,即28、29、30或31-作为练习留作计算:-(
/NSCalendar
方法应该在这里有所帮助)NSDate
- 为你安排两次约会,这样差别就会是正的
- 只获取年、月和日组件(或者全部获取,然后丢弃其他组件)——这将丢弃时间组件。使用
的方法之一执行此操作李>NSCalendar
- 您的年份差异就是年份组件之间的差异
- 你的月差是你的月组成部分(可能是负的)加上你的年差的12倍
- 您可以使用
仅请求日期组件来查找日差组件:fromDateComponents:toDateComponents:options:
[注意:小心使用与原始日期相同的时区-这有点复杂,因为您可能需要自己从日期字符串中提取它(提取+hhmm并创建时区)。您必须记住,
NSDate
不存储时区,它只是一个绝对时间点(因此,不同时区中的等效时间会产生相同的NSDate
值),对于您的计算,您希望它们基于原始时区,因为一个时区中同一天的两次可能在不同时区中的不同日期…)。您可以设置NSCalendar
实例的时区,或者使用从NSDate
转换为NSDateComponents
]时采用时区的方法。第一个示例的差异是3小时,即0个月和0天。第二个示例的结果是1年0个月1天。如果指定了单位年,您将永远不会得到月>12,如果指定了单位月,您将永远不会得到天>365。和dateWithString
API长期以来被弃用。@我想根据日历值进行比较。在第一个示例中,date1在5月,date2在6月,所以我想要的结果是1。与Day相同也不关心dateWithString
,我用它来演示NSDate
值只能比较两个日期。但你只能指定一个单位,结果会更大,也会更小。@Vadian谢谢,但我想通过数字得到差值谢谢。我试着按照你的建议去做,但我把这个问题贴在这里,希望你能帮到我way@BùiĐứcKhánh–我对您的目标有了另一个猜测,该算法产生的结果与您的两个示例相同。当然,你应该详细说明你想要的“差异”的定义,而不是给出几个例子,这样人们就不得不尝试猜测来帮助你。希望这个有帮助。