我在Objective-C
有一个申请。我有NSDate
2014-01-01
,我已在屏幕上显示。
我想要的是一种在一段时间间隔后增加日期的方法。例如,每隔5秒,日期应增加一天。
我希望这可以独立于其他任务发生,可能在另一个线程上。在此更新期间,我将进行其他操作。
编辑:解决了!答案 0 :(得分:1)
使用NSTimer 当它触发时,更改日期。 但是你需要阅读有关NSDate的内容。 你所拥有的是暗夜。 NSDate是一个确切的时间点,这意味着时间是其中的一部分。 NSTimeZone也是其中的一部分。 NSCalendar也是如此。 它们一起为您提供NSTimeInterval值的人类可读值,该值是NSDate在对象中包装的值,是自参考日期正或负以来的秒数。
问题是有些日期没有午夜,有些日期有两个。 所以隐含的午夜会搞砸日历计算。 将时间设定为中午。 然后使用10.9中的一个非常棒的新方法,但仅在NSDate.h头文件中,而不是在文档中。
答案 1 :(得分:0)
@implementation ViewController{
NSDateFormatter *dateFormat;
NSString *changedDate;
}
-(void)viewDidLoad
{
[super viewDidLoad];
[self getDate];
[self update];
}
-(void)getDate{
NSDate *today = [NSDate date];
dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"dd/MM/yyyy"];
NSString *dateString = [dateFormat stringFromDate:today];
NSLog(@"Today is: %@", dateString);
changedDate = dateString;
}
-(void)update{
NSDate *d = [NSDate dateWithTimeIntervalSinceNow: 0];
NSTimer *t = [[NSTimer alloc] initWithFireDate: d
interval: 1
target: self
selector:@selector(addOneDay:)
userInfo:nil
repeats:YES];
NSRunLoop *runner = [NSRunLoop currentRunLoop];
[runner addTimer:t forMode: NSDefaultRunLoopMode];
}
-(void)addOneDay:(NSTimer*)timer
{
NSDate *getDate = [dateFormat dateFromString:changedDate];
int oneDayInterval = 24 * 60 * 60; //in seconds
NSDate *newDate = [getDate dateByAddingTimeInterval:oneDayInterval];
changedDate = [dateFormat stringFromDate:newDate];
NSLog(@"new Date: %@",changedDate);
}
@end