【问题标题】:How to display time in Objective C [closed]如何在Objective C中显示时间[关闭]
【发布时间】:2014-06-03 11:25:51
【问题描述】:

我在Objective-C 有一个应用程序。我有一个NSDate,属于2014-01-01,已显示在屏幕上。

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

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

编辑:已解决!

【问题讨论】:

  • 你试过什么?我将首先在主线程上增加您的NSDate 以熟悉它的方法。然后,专注于将该操作移至后台线程。
  • 我知道如何增加日期,只是不知道如何独立于其他操作。我想要它,这样无论用户在做什么,日期都会不断增加。我不知道我应该把那个增量放在哪里。
  • xcode 和 xcode 5 都不是编程语言。
  • 对不起,我的错。传入编辑。
  • xcode 5 也不是运行时环境。它只是一个编辑器。

标签: ios objective-c cocoa-touch nsdate


【解决方案1】:

使用 NSTimer 当它触发时,更改日期。 但是您需要阅读有关 NSDate 的信息。 你所拥有的是隐含的午夜。 NSDate 是一个准确的时间点,这意味着时间是其中的一部分。 NSTimeZone 也是其中的一部分。 NSCalendar 也是如此。 它们一起从 NSTimeInterval 值中为您提供人类可读的值,这是 NSDate 包装在对象中的值,并且是自参考日期正数或负数以来的秒数。

问题是有些日期没有午夜,有些日期有两个。 所以隐含的午夜会搞砸历法计算。 将时间设置为中午。 然后使用 10.9 中的一种很棒的新方法,但仅在 NSDate.h 标头中,而不是在文档中。

【讨论】:

  • 我理解你所说的关于 NSTimer 和 NSDate 其他方面的内容。我实际上已经涵盖了所有这些方面,只是没有提及它们。我不明白的是我怎么能有一个重复的 NSTimer。如果我将计时器放在 viewDidLoad 或其他东西中,执行不会永远卡在那里吗?基本上我如何在后台执行 NSTimer?
  • 另外,澄清一下,我的问题不在于 NSDate 或 NSTimer 方法。我的问题是我应该把 NSTimer 放在哪里。
  • 定时器必须是一个对象的属性,只要你想要定时器,它就会一直存在。您可以随时使计时器无效。它可以在您的应用委托中,除非它需要与其他东西相关联。
  • 好的,谢谢!我不知道 NSTimer 会自行继续,但 Alan 发布了代码,所以我现在知道您的解决方案是正确的。谢谢!
【解决方案2】:
    @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

【讨论】:

  • 谢谢,但是 [self update] 不会在 viewDidLoad 中只运行一次吗?所以计时器只会运行两次?在 viewDidLoad 之后,当我想从我的应用中调用其他方法时呢?
  • 更新函数只被调用一次(当视图加载时)但更新函数内的计时器每秒调用 addOneDay 函数......如果这回答了你的问题......? :)
  • 没关系,非常感谢!这完美!我试过了。
猜你喜欢
  • 2011-09-16
  • 2012-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多