如何在Objective C中显示时间

时间:2014-06-03 11:25:51

标签: ios objective-c cocoa-touch nsdate

我在Objective-C有一个申请。我有NSDate 2014-01-01,我已在屏幕上显示。

我想要的是一种在一段时间间隔后增加日期的方法。例如,每隔5秒,日期应增加一天。

我希望这可以独立于其他任务发生,可能在另一个线程上。在此更新期间,我将进行其他操作。

编辑:解决了!

2 个答案:

答案 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