菜鸟教程小白 发表于 2022-12-13 12:17:48

objective-c - NSDate 和时区差异


                                            <p><p>我已经浏览苹果文档和 stackoverflow 有一段时间了,但我无法为我的问题找到正确的答案。
我会尽力解释。在我的应用程序中,用户能够在特定时间创建测量值。测量的日期和时间很重要。</p>

<p>在我的 NSDate+Helper 类别中,我创建了以下辅助方法:</p>

<pre><code>- (NSDate *)dateByMovingToBeginningOfDay
{
    unsigned int flags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;
    NSDateComponents* parts = [ components:flags fromDate:self];
    ;
    ;
    ;
    return [ dateFromComponents:parts];
}

- (NSDate *)dateByMovingToEndOfDay {
    unsigned int flags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;
    NSDateComponents* parts = [ components:flags fromDate:self];
    ;
    ;
    ;
    return [ dateFromComponents:parts];
}
</code></pre>

<p>这种方法可以帮助我获得一整天的测量范围:</p>

<pre><code>NSDate *start = [ dateByMovingToBeginningOfDay];
NSDate *end   = [ dateByMovingToEndOfDay];

NSMutableSet *measurementsSet = ;
</code></pre>

<p>这就是我的问题所在。假设我在 <code>2012-03-14 0:42:59 (GMT+1)</code> 在我的模拟器上添加了一个测量值 - 因为这是显示的时间我的模拟器 - 并将其保存在核心数据中。</p>

<p><code></code> 那时是 <code>2012-03-13 23:42:59</code> 所以 <code>NSDate *start = [ dateByMovingToBeginningOfDay] ;</code> 给我前一天的开始日期。这是个问题。</p>

<p>我的问题是,它适用于所有不同时区的用户的最佳方法是什么?</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>如果您想跨多个时区使用相同的数据,那么您唯一的选择就是在您的应用中使用相同的时区,无论 iPad 显示什么时间。通常,您为此目的使用 UTC(并且是创建和保存时间的默认时区)。</p>

<p>如果您只是希望它与本地时区匹配,那么您需要像这样更改您的例程:</p>

<pre><code>- (NSDate *)dateByMovingToBeginningOfDay
{
    NSCalendar *calendar = ;
    ];

    unsigned int flags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;

    NSDateComponents* parts = ;
    ;
    ;
    ;

    return ;
}
</code></pre>

<p>以同样的方式更新第二个例程。</p></p>
                                   
                                                <p style="font-size: 20px;">关于objective-c - NSDate 和时区差异,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/9710926/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/9710926/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: objective-c - NSDate 和时区差异