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]