NSDateComponents在模拟器上执行

时间:2012-01-30 21:14:15

标签: ios nsdate nscalendar nsdatecomponents

我有以下代码。当我在我的iOS 3.1.3设备上运行它(克服它!)它按预期工作,但当我在模拟器(iOS 5和4.3)上运行它时,它是1分15秒(9:01:15) )。这是因为我的代码,模拟器中的错误还是iOS 4 +中的错误?

NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *components = [calendar components:(NSHourCalendarUnit | NSMinuteCalendarUnit) fromDate:[NSDate date]];
components.hour = 9;
components.minute = 0;
NSDate *date = [calendar dateFromComponents:components]; // <-- date is off on simulator

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

我不完全理解为什么会这样,但是当您使用dateFromComponents:来创建很久以前的日期时会发生这种情况。具体来说,截止日期似乎是1847年12月1日。当天早上12点之前的任何事情似乎最终都是1 分15秒。

在您的情况下,这种情况正在发生,因为如果您只设置components.hourcomponents.minute,那么您将从1月1日1AD开始收到日期。

如果您将年,月和日期设置为更近期的内容,请执行以下操作:

components.year = 2012;
components.month = 2;
components.day = 6;

然后你会得到正确的输出(我在iOS模拟器中得到的):

2012-02-06 09:00:00 +0000