我如何能够确定某个NSDate对象是否属于某一天?由于所有日期都计算到GMT时区,因此日期实际上可能是8日而不是9日。在计算诸如天,月,星期等事情时,考虑时区差异的最佳方法是什么。
答案 0 :(得分:2)
NSDate
是绝对时间点。当您想知道它落在哪一天时,您必须考虑您的特定时区。由于您获得了NSDateComponents
NSCalendar
,因此您可以在日历上使用setTimeZone:
来获取您感兴趣的时区的组件(月,日,小时等)
如果您处理“日历日期”(即应始终代表特定日期/月份的日期而非绝对时间点),您可以始终使用固定时区(例如GMT)来显示日期。 NSDateFormatter
(用于向用户显示日期)也具有timeZone
属性。
答案 1 :(得分:1)
您需要在NSCalendar
中设置所需的时区,然后才能将日期分成几部分:
NSCalendar* gregorian = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease];
[gregorian setTimeZone:[NSTimeZone localTimeZone]]; // or timeZoneWithName:@"GMT" etc.
unsigned unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit;
NSDateComponents* compsDate = [gregorian components:unitFlags fromDate:date];
// [compsDate year] [compsDate month] [compsDate day]