0

我有以下代码。当我在我的 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

谢谢你的帮助!

4

1 回答 1

2

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

在您的情况下,这是因为如果您只设置components.hourand components.minute,您将获得一个从公元 1 月 1 日开始的日期。

如果您将年、月和日期设置为较新的值,如下所示:

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

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

2012-02-06 09:00:00 +0000
于 2012-02-06T11:21:30.187 回答