2013-11-03 60 views
1

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

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

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

我应该使用时间而不是使用NSDate吗?我对iOS很有兴趣,所以任何见解都会有所帮助。感谢您的回应。

+0

改变你的时区... – Floris

+0

你能解释一下你的意思吗?我不希望星期六转到星期天,直到凌晨3点或任何特定的时间。所以基本上我想将日期变化抵消几个小时。 – chackerman

+2

这不是日期在现实世界或iOS中的工作方式。你需要加入一些逻辑来检查时间。 – Kevin

回答

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]; 
+0

谢谢!这个工作很完美。是一个显示酒吧特色菜,小时等等的应用程序,我希望我们的用户在当天打开特色菜的应用程序,这显然已经过了午夜。 – chackerman