Ios 如何在Objective C中显示时间
我在Ios 如何在Objective C中显示时间,ios,objective-c,cocoa-touch,nsdate,Ios,Objective C,Cocoa Touch,Nsdate,我在Objective-C中有一个应用程序。我有一个NSDate,日期为2014-01-01,我已将其显示在屏幕上 我想要的是一种在一个时间间隔后增加日期的方法。例如,每5秒,日期应增加一天 我希望这独立于其他任务,可能在另一个线程上发生。我将在此日期更新期间进行其他操作 编辑:解决了 使用NSTimer 当它触发时,更改日期。 但你需要了解NSDate。 你所拥有的暗示是午夜。 NSDate是一个精确的时间点,这意味着时间是它的一部分。 NSTimeZone也是它的一部分。 NSCalenda
Objective-C
中有一个应用程序。我有一个NSDate
,日期为2014-01-01
,我已将其显示在屏幕上
我想要的是一种在一个时间间隔后增加日期的方法。例如,每5秒,日期应增加一天
我希望这独立于其他任务,可能在另一个线程上发生。我将在此日期更新期间进行其他操作
编辑:解决了 使用NSTimer
当它触发时,更改日期。
但你需要了解NSDate。
你所拥有的暗示是午夜。
NSDate是一个精确的时间点,这意味着时间是它的一部分。
NSTimeZone也是它的一部分。
NSCalendar也是。
它们一起从NSTimeInterval值中为您提供了一个人类可读的值,NSDate将该值包装在对象中,并且是自参考日期起的秒数(正或负)
问题是有些约会没有午夜,有些约会有两个午夜。
因此,隐含的午夜将破坏日历计算。
把时间定在中午。
然后使用10.9中的一个很棒的新方法,但只在NSDate.h标题中使用,而不在文档中使用 你试过什么?首先,我将增加主线程上的
NSDate
,以熟悉其方法。然后,集中精力将该操作移动到后台线程。我知道如何增加日期,只是不知道如何独立于其他操作进行。我希望这样,无论用户在做什么,日期都会不断增加。我不知道应该把增量放在哪里。xcode和xcode 5都不是编程语言。对不起,我的错。传入的edit.xcode 5不是运行时环境。这只是一个编辑。我理解你对NSTimer和NSDate的其他方面所说的话。我实际上已经涵盖了所有这些方面,只是没有提到它们。我不明白的是我怎么会有一个重复的NSTimer。如果我把计时器放在viewDidLoad之类的地方,执行不会永远卡在那里吗?基本上,我如何在后台执行NSTimer?另外,我要澄清的是,我的问题不是NSDate或NSTimer方法。我的问题是我应该把NSTimer放在哪里。计时器需要是一个对象的属性,该对象的寿命与你想要的一样长。您可以随时使计时器失效。它可能在你的应用程序代理中,除非它需要与其他内容关联。是的,谢谢!我不知道NSTimer是独立运行的,但Alan发布了代码,因此我现在知道您的解决方案是正确的。谢谢谢谢,但是在viewDidLoad中[自我更新]不会只运行一次吗?那么计时器将只运行两次?在viewDidLoad之后,当我希望从我的应用程序调用其他方法时,会怎么样?更新函数只调用一次(当视图确实加载时),但更新函数中的计时器每秒调用addOneDay函数。。。如果这回答了你的问题…?:)没关系,非常感谢你!这很好用!我试过了。
@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