确定NSDate对象的日期组件(时区问题)

时间:2011-08-14 01:32:44

标签: objective-c timezone nsdate

我如何能够确定某个NSDate对象是否属于某一天?由于所有日期都计算到GMT时区,因此日期实际上可能是8日而不是9日。在计算诸如天,月,星期等事情时,考虑时区差异的最佳方法是什么。

2 个答案:

答案 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]