6

次の 1 時間までのカウントダウンを行いたいと思います。次のように、特定の時間までカウントダウンするのは非常に簡単です。

NSDate *midnight = [NSDate dateWithNaturalLanguageString:@"midnight tomorrow"]; 

「毎時開始」の NSDate を定義するにはどうすればよいですか?

ありがとう!

編集:これは私が現在持っているものです。ソリューションをコードに統合するのに問題があります。どんな助けでも大歓迎です。:)

-(void)updateLabel {
NSDate *now = [NSDate date];

NSDate *midnight = [NSDate dateWithNaturalLanguageString:@"midnight tomorrow"]; 

//num of seconds between mid and now
NSTimeInterval timeInt = [midnight timeIntervalSinceDate:now];
int hour = (int) timeInt/3600;
int min = ((int) timeInt % 3600) / 60;
int sec = (int) timeInt % 60;
countdownLabel.text = [NSString stringWithFormat:@"%02d:%02d:%02d", hour, min,sec];
}  
4

6 に答える 6

17

MacOS SDK でのみ利用可能であり、+dateWithNaturalLanguageStringiPhone をターゲットにしているため、独自のメソッドを作成する必要があります。NSCalendarクラスがあなたを助けることができると思います:

- (NSDate*) nextHourDate:(NSDate*)inDate{
    NSCalendar *calendar = [NSCalendar currentCalendar];
    NSDateComponents *comps = [calendar components: NSEraCalendarUnit|NSYearCalendarUnit| NSMonthCalendarUnit|NSDayCalendarUnit|NSHourCalendarUnit fromDate: inDate];
    [comps setHour: [comps hour]+1]; // Here you may also need to check if it's the last hour of the day
    return [calendar dateFromComponents:comps];
}

私はこのコードをチェックしていませんが、(少なくともこのアプローチは) うまくいくはずです。

于 2010-02-22T07:34:17.357 に答える
6

おそらくタイムスタンプを操作する最も簡単な方法は、現在の時間の最初に丸め、1 時間を追加することです。

- (NSDate*)nextHourDateForDate:(NSDate*)date {
    NSTimeInterval timestamp = [date timeIntervalSince1970];
    NSTimeInterval current = timestamp - fmod(timestamp, 3600);
    NSTimeInterval next = current + 3600;

    return [NSDate dateWithTimeIntervalSince1970:next];
}
于 2013-11-02T23:18:48.897 に答える
3

あなたはこれをチェックしたいかもしれません。Erica Sadunは、NSDateにいくつかの拡張機能を投稿しました。

http://github.com/erica/NSDate-Extensions

于 2010-02-23T02:01:32.550 に答える
1

これはうまくいくと思います(注:非常に簡単にテストされています)

NSDateFormatter *currentSecondFormatter = [[NSDateFormatter alloc] init];
[currentSecondFormatter setDateFormat:@"ss"];
NSDateFormatter *currentMinuteFormatter = [[NSDateFormatter alloc] init];
[currentMinuteFormatter setDateFormat:@"mm"];

// get next hour from now
int timeUntilNextHour = ( (60 - [[currentMinuteFormatter stringFromDate:[NSDate date]] integerValue]) * 60) -  [[currentSecondFormatter stringFromDate:[NSDate date]] integerValue];
于 2012-09-07T11:31:51.297 に答える