在两个NSDate之间获得准确的时间差?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在两个NSDate之间获得准确的时间差?相关的知识,希望对你有一定的参考价值。

有没有办法找出两个NSDate之间的准确差异?

我找到了解决方案,但它们不够准确。我需要考虑夏令时,不同月份的天数不同等等。

一个简单的计算,如/ 60/60/24等,可以计算出分钟,小时和天数,但不考虑它们。

让我们说我需要弄清楚现在的时间([NSDate date])和12月25日晚上10:22(用户使用日期选择器[datePicker date]选择的日期)之间的差异,作为一个例子,我该怎么做? 知道确切的时差并不是关键,只要我有几天,几个月和几年的准确差异就可以了。

答案

来自Apple的Date & Time Programming Guide

清单12获取两个日期之间的差异

NSDate *startDate = ...;
NSDate *endDate = ...;

NSCalendar *gregorian = [[NSCalendar alloc]
                 initWithCalendarIdentifier:NSGregorianCalendar];

NSUInteger unitFlags = NSMonthCalendarUnit | NSDayCalendarUnit;

NSDateComponents *components = [gregorian components:unitFlags
                                          fromDate:startDate
                                          toDate:endDate options:0];
NSInteger months = [components month];
NSInteger days = [components day];
另一答案

NSDate完全独立于时区。 NSDate甚至没有采用夏令时。只有当您将NSDate转换为人类可读格式(MM / DD / YY,HH:MM:SS格式等)时,时区才能进入画面。

创建NSDate时,请确保考虑正确的时区,日光保存设置。随后,方法,[date1 timeIntervalSinceDate:date2]应该总是给你准确的时差。

另一答案

因此,您要问的更准确的问题是:如何从两个日期之间的差异中获得格式良好的日期,月份,年份。首先,您希望获得nsTimerInterval(以秒为单位的时间差),然后对其进行格式化:

How do I break down an NSTimeInterval into year, months, days, hours, minutes and seconds on iPhone?

另一答案

最新ios代码的小更新:

NSDate *startDate = ...;
NSDate *endDate = ...;

NSCalendar *gregorian = [[NSCalendar alloc]
                             initWithCalendarIdentifier:NSCalendarIdentifierGregorian];

NSUInteger unitFlags = NSCalendarUnitMonth | NSCalendarUnitDay;

NSDateComponents *components = [gregorian components:unitFlags
                                            fromDate: startDate
                                              toDate:endDate options:0];
NSInteger months = [components month];
NSInteger days = [components day];

以上是关于在两个NSDate之间获得准确的时间差?的主要内容,如果未能解决你的问题,请参考以下文章

仅获得两个日期之间的周末

没有从 NSDate 获得正确的日期

如何获得两个地方之间的准确或(接近准确)距离? mysql/php

在 Swift 中,可以使用 NSDateComponents 来帮助 NSDate 保持纳秒精度吗?

如何计算不同时区的两个 NSDate 对象之间的天数差异?

如何获得两个地理点坐标之间的最短行驶路径和距离?