0

我正在制作一个时钟应用程序,我想显示当前时间,组件(小时分钟,秒)间隔开。我认为这样做的唯一方法是将时间分成三个字符串。我怎么做?

- (void)updateTime {

    [updateTimer invalidate];
    updateTimer = nil;

    currentTime = [NSDate date];
    NSDateFormatter *timeFormatter = [[NSDateFormatter alloc] init];
    [timeFormatter setTimeStyle:NSDateFormatterMediumStyle];
    lblTime.text = [timeFormatter stringFromDate:currentTime];

    updateTimer = [NSTimer scheduledTimerWithTimeInterval:0.01 target:self selector:@selector(updateTime) userInfo:nil repeats:YES];

}
4

3 回答 3

4

这里有几件事:

1)如果你想要一个持续运行的计时器,不要在每次调用“ updateTime”时使其无效(并且只调用scheduledTimerWithTimeInterval:一次......而不是在每次updateTime调用“”结束时)。

2)看起来你有一个标签来显示你的时间。您应该使您timeFormatter的 ivar (实例变量,因此它只创建和设置一次),然后您可以通过以下方式设置格式:

timeFormatter.dateFormat = @"HH:mm:ss";

你应该准备好了。

您的新updateTime方法可能如下所示:

- (void)updateTime {    
    currentTime = [NSDate date];
    lblTime.text = [timeFormatter stringFromDate:currentTime];    
}

3)如果你想要三个不同的标签,你需要为这三个标签声明 IBOutlets 并拥有三个不同的日期格式化程序。例如:

@interface YourViewController : UIViewController ()
{
    IBOutlet UILabel * hourLabel; // you need to connect these in your XIB/storyboard
    IBOutlet UILabel * minuteLabel;
    IBOutlet UILabel * secondLabel;

    NSDateFormatter * hourFormatter;
    NSDateFormatter * minuteFormatter;
    NSDateFormatter * secondFormatter;
}

然后,在您的 " viewDidLoad:" 方法中,设置您的格式化程序:

hourFormatter = [[NSDateFormatter alloc] init;
hourFormatter.dateFormatter = @"HH";
minuteFormatter = [[NSDateFormatter alloc] init;
minuteFormatter.dateFormatter = @"mm";
secondFormatter = [[NSDateFormatter alloc] init;
secondFormatter.dateFormatter = @"ss";

最后,在您的 " updateTime" 方法中:

- (void)updateTime {    
    currentTime = [NSDate date];
    if(hourFormatter)
    {
        if(hourLabel)
        {
            hourLabel.text = [hourFormatter stringFromDate: currentTime];
        } else {
            NSLog( @"you need to connect your hourLabel outlet in your storyboard or XIB" );
        }
    } else {
        NSLog( @"you need to allocate and init and set hourFormatter");
    }
    minuteLabel.text = [minuteFormatter stringFromDate: currentTime];
    secondLabel.text = [secondFormatter stringFromDate: currentTime];
}
于 2013-05-18T16:55:20.880 回答
0

您可以通过使用来分隔 hh、mm、ss

NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *components = [calendar components:(NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit) fromDate:[NSDate date]];
NSInteger hour = [components hour];
NSInteger minutes = [components minute];
NSInteger seconds = [components second];
于 2013-08-30T11:52:55.797 回答
0

如果你只需要一个字符串,你可以改变

[timeFormatter setTimeStyle:NSDateFormatterMediumStyle];

[timeFormatter setDateFormat:@"hh:mm:ss"];
于 2013-05-18T16:58:03.153 回答