Objective c 日期差异:当前日历与公历日历

Objective c 日期差异:当前日历与公历日历,objective-c,nsdatecomponents,Objective C,Nsdatecomponents,这段代码似乎在计算日期之间的确切差异时产生了一些问题:有可能吗 我想改用公历。。。如何操作?首先,组件:fromDate:toDate返回两个日期之间的差值。因此,从2010-10-01到2010-12-31的差异预计为91天,您必须添加一天以包括开始日期和结束日期 问题是:为什么函数返回90天而不是91天 问题在于日历和日期组件使用的时区。默认情况下,使用本地时区。例如,让我们假设本地时区为“欧洲/柏林” 由于夏令时在10月初处于活动状态,因此本地时区的开始日期为“2010-10-01 02:

这段代码似乎在计算日期之间的确切差异时产生了一些问题:有可能吗


我想改用公历。。。如何操作?

首先,
组件:fromDate:toDate
返回两个日期之间的差值。因此,从2010-10-01到2010-12-31的差异预计为91天,您必须添加一天以包括开始日期和结束日期

问题是:为什么函数返回90天而不是91天

问题在于日历和日期组件使用的时区。默认情况下,使用本地时区。例如,让我们假设本地时区为“欧洲/柏林”

由于夏令时在10月初处于活动状态,因此本地时区的开始日期为“2010-10-01 02:00:00”,而本地时区的结束日期为2010-12-31 01:00:00,因为夏令时在12月未处于活动状态。这两个日期之间的差异是90天和23小时,而不是91天

要解决这个问题,你可以

  • 根据本地时区创建开始和结束日期,或
  • 将时区设置为“GMT”进行差值计算
第二种解决方案的示例:

NSDateComponents *components;
components = [[NSCalendar currentCalendar] components: NSDayCalendarUnit
                                             fromDate: startDate 
                                               toDate: endDate options: 0];
days = [components day];

首先,
components:fromDate:toDate
返回两个日期之间的差值。因此,从2010-10-01到2010-12-31的差异预计为91天,您必须添加一天以包括开始日期和结束日期

问题是:为什么函数返回90天而不是91天

问题在于日历和日期组件使用的时区。默认情况下,使用本地时区。例如,让我们假设本地时区为“欧洲/柏林”

由于夏令时在10月初处于活动状态,因此本地时区的开始日期为“2010-10-01 02:00:00”,而本地时区的结束日期为2010-12-31 01:00:00,因为夏令时在12月未处于活动状态。这两个日期之间的差异是90天和23小时,而不是91天

要解决这个问题,你可以

  • 根据本地时区创建开始和结束日期,或
  • 将时区设置为“GMT”进行差值计算
第二种解决方案的示例:

NSDateComponents *components;
components = [[NSCalendar currentCalendar] components: NSDayCalendarUnit
                                             fromDate: startDate 
                                               toDate: endDate options: 0];
days = [components day];

在这里获得帮助的最好方法是提供一个例子,说明你期望得到的答案,以及你实际得到的答案。包括复制您的问题所需的所有数据(如startDate和endDate)。这里有一个日志:开始日期:2010-10-01 00:00:00+0000结束日期:2010-12-31 00:00+0000天:90应该是92天,不是吗?从日志中有什么想法吗?可能我需要包括StartDate和EndDate才能有92天?是的,如果你想包括它们的话。从10/1/10到12/31/10有90天……在这些情况下如何包括开始日期和结束日期?在这里获得帮助的最佳方式是提供一个示例,说明您期望得到的答案以及您实际得到的答案。包括复制您的问题所需的所有数据(如startDate和endDate)。这里有一个日志:开始日期:2010-10-01 00:00:00+0000结束日期:2010-12-31 00:00+0000天:90应该是92天,不是吗?从日志中有什么想法吗?可能我需要包括StartDate和EndDate才能有92天?是的,如果你想包括它们的话。从10/1/10到12/31/10有90天……在这些情况下,如何同时包括startDate和EndDate?setTimeZone:[NSTimeZone timeZoneWithName:@“UTC”]应该给出相同的结果?@Fabrizio:我强烈认为是这样。但我不是格林尼治标准时间和UTC之间细微差别的专家,所以你可以自己做研究来验证这一点。维基百科中写道:“在大多数情况下,UTC与GMT同义,但GMT不再由科学界精确定义。”setTimeZone:[NSTimeZone timeZoneWithName:@“UTC”]应该给出相同的结果?@Fabrizio:我强烈认为是这样。但我不是格林尼治标准时间和UTC之间细微差别的专家,所以你可以自己做研究来验证这一点。维基百科上写道:“在大多数情况下,UTC是GMT的同义词,但GMT不再由科学界精确定义。”