1

だから私はNSTimerを持っていて、タイマーを一時停止して再生するために日付フォーマッタを使用していますが、タイマーを開始すると、00:00:00に開始したいときに07:00:00に開始します。

私のタイマーコードは

-(void) updateTimer {

    NSDate *currentDate = [NSDate date];

    NSTimeInterval timeInterval = [currentDate timeIntervalSinceDate:startDate];
    NSDate *timerDate = [NSDate dateWithTimeIntervalSince1970:timeInterval];

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    dateFormatter.dateFormat = @"hh:mm:ss";
    //[dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0.0]];

    NSString *timeString = [dateFormatter stringFromDate:timerDate];
    hhmmssLabel .text = timeString;
    pauseTimeInterval = timeInterval;

}

-(void)pauseTimer {

    [tickerTimer invalidate];
    tickerTimer = nil;
    [self updateTimer];
}

-(void) unPauseTimer {

    startDate = [NSDate date] ;
    startDate = [startDate dateByAddingTimeInterval:((-1)*(pauseTimeInterval))];
    tickerTimer = [NSTimer scheduledTimerWithTimeInterval:1.0/1.0 target:self selector:@selector(updateTimer) userInfo:nil repeats:YES];
}

タイムゾーンに関係していると思いますので、コメントアウトしましたが役に立ちませんでした。00:00:00 に開始できません

4

1 に答える 1

1

コードを少し簡素化できると思います。要件はそれほど複雑ではありません (絶対的な日付ではなく間隔を扱っているだけです)。したがって、次のようなものを使用しても問題ありません。

NSDate * currentDate = [NSDate date];
NSTimeInterval timeInterval = [currentDate timeIntervalSinceDate:startDate];

// NSTimeInterval is in measured in Seconds
NSInteger hours = ( (NSInteger) timeInterval / 3600.0 );
NSInteger mins  = ( (NSInteger) (timeInterval / 60) % 60 );
NSInteger secs  = ( (NSInteger) timeInterval % 60.0 );

NSString * timeString = [NSString stringWithFormat:%02u:%02u:%02u, hours, mins, secs];

それ以外の場合は、この回答を見てください。おそらくあなたが必要です@"HH:mm:ss"(24時間)または[NSTimeZone timeZoneWithName:@"UTC"]];

于 2013-06-25T18:21:02.627 に答える