NSDate延迟日期更改

时间:2013-11-03 15:13:03

标签: ios iphone nsdate

这可能是一个简单的解决方案,但是有谁知道如何延迟NSDate在午夜过后的变化?任何见解都会非常有用,谢谢!

修改 我目前正在以这种方式获取日期并显示基于当天的位置数据。但是,就像NSDate在逻辑上应该工作一样,它会在午夜切换到第二天。我希望日期在凌晨3点而不是在凌晨12点更改。

NSDateFormatter *f = [[NSDateFormatter alloc] init];
[f setDateFormat:@"EEEE"];
today = [f stringFromDate:[NSDate date]];

我应该只使用时间而不是使用NSDate吗?我对iOS来说是一个菜鸟,所以任何见解都会有所帮助。感谢您的回复。

1 个答案:

答案 0 :(得分:2)

我必须承认我还不明白为什么你想要显示“错误的”工作日 名称,但以下代码应该做你想要的。这只是各种方式之一 实现你的任务。

将日期转换为“日期组件:”

NSCalendar *cal = [NSCalendar currentCalendar];
NSUInteger unitFlags = NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit|NSHourCalendarUnit|NSMinuteCalendarUnit|NSSecondCalendarUnit;
NSDateComponents *comp = [cal components:unitFlags fromDate:[NSDate date]];

如有必要,减去一天:

if (comp.hour < 3) {
    comp.day -= 1;
}

将调整后的组件转换回日期:

NSDate *adjustedDate = [cal dateFromComponents:comp];

您的原始代码,现在使用调整后的日期:

NSDateFormatter *f = [[NSDateFormatter alloc] init];
[f setDateFormat:@"EEEE"];
NSString *today = [f stringFromDate:adjustedDate];