菜鸟教程小白 发表于 2022-12-12 08:52:57

ios - 与 NSDateComponents 的时差


                                            <p><p>我正在构建一个应用程序,而我需要计算两个 NSDate 之间的时间。</p>

<p>我对 <code>NSObject</code> 进行了子类化并将其命名为“MyObject”(为了这个问题而进行了简化)。</p>

<p>它拥有这两个属性</p>

<pre><code>@property (nonatomic, strong) NSDate *startDate;
@property (nonatomic, strong) NSDate *endDate;
</code></pre>

<p>我有一个存储 x 个 MyObjects 的数组,我像这样循环遍历它</p>

<pre><code>NSTimeInterval totalInterval = 0;
for (MyObject *currentObject in _listOfItems)
{
    totalInterval += ;
}
</code></pre>

<p>我使用 <code>totalInterval</code> 来总结所有“跨度”组合的长度。我通过设置 2 个 NSDates 来做到这一点,只是为了计算差异。</p>

<pre><code>NSDate *date1 = [ init];
NSDate *date2 = [ initWithTimeInterval:totalInterval sinceDate:date1];
</code></pre>

<p>我正在设置这些标志:</p>

<pre><code>unsigned int unitFlags = NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitDay | NSCalendarUnitMonth;
</code></pre>

<p>并将结果返回为 <code>NSDateComponent</code>,如下所示:</p>

<pre><code>return ;
</code></pre>

<p>我的问题:当我使用上述单位时,我得到了错误的结果 - 即 <strong>11h 20m</strong>,而真正的答案大约是 <strong>83h</strong>。我了解到我不必要地指定了 <code>NSCalendarUnitDay</code> 和 <code>NSCalendarUnitMonth</code> 单位。阅读文档后,我读到“没有必要指定比您感兴趣的组件更多的组件”,并且我删除了两个不必要的指定单元。这给了我正确的结果,但怎么会呢? <strong>为什么只是指定更多的单位会报告错误的结果?</strong></p>

<p>谢谢!</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>计算将始终从您要求的最大单位开始。因此,如果您询问天数和小时数,但只检查小时数,您将看到以 24 为模的实际总小时数。这适用于 <code>NSCalendar</code> 执行的任何日期分解。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 与 NSDateComponents 的时差,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/32579578/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/32579578/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 与 NSDateComponents 的时差