0

NSDateの iPhone docsetでは、ディスカッション エリアで議論-dateWithNaturalLanguageString:locale:されていますが、ページの他の場所でメソッドを文書化していません。

以前にiPhoneでこの方法を使用したことがありますが、警告は表示されましたが、問題なく機能しました。今、私は-Werror(私はずっとやっていたはずです^_^)で構築しているので、これで警告に出くわしました。

次のコード行をどのように置き換えますか?

NSDate *today = [NSDate dateWithNaturalLanguageString:@"today at 23:59:59"];
NSDate *tomorrow = [NSDate dateWithNaturalLanguageString:@"tomorrow at 23:59:59"];
4

2 に答える 2

2

これを行う 1 つの方法は、NSCalendar と NSDateComponents を使用することです。

今日の 23:59:59 を取得するには:

NSDate *now = [NSDate date];
NSCalendar *calendar = [NSCalendar currentCalendar];

NSDateComponents *comps = [calendar components:NSYearCalendarUnit | NSMonthCalendarUnit |  NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit 
                                      fromDate:date];

[comps setHour:23];
[comps setMinute:59];
[comps setSecond:59];

NSDate *today = [calendar dateFromComponents:comps];

明日の 23:59:59 を取得するには:

NSDate *now = [NSDate dateWithTimeIntervalSinceNow:24 * 60 * 60]; // 24h from now
NSCalendar *calendar = [NSCalendar currentCalendar];

NSDateComponents *comps = [calendar components:NSYearCalendarUnit | NSMonthCalendarUnit |  NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit 
                                      fromDate:date];

[comps setHour:23];
[comps setMinute:59];
[comps setSecond:59];

NSDate *tomorrow = [calendar dateFromComponents:comps];
于 2009-08-27T21:56:02.343 に答える
1

仮定しましょう:

static const unsigned long seconds_per_day = 60 * 60 * 24;

次の方法で、今すぐ +24 時間取得できます。

NSDate* today = [NSDate date]; // set for today
NSDate* tomorrow = [today addTimeInterval:seconds_per_day];

特定の日の午前 0 時を取得するには、NSDate*が にブリッジされた通話料無料であることを覚えておくことが重要CFDateRefです。これは、使用したい追加の API を提供します。特に、 を で に変換NSDateできCFAbsoluteTimeますCFDateGetAbsoluteTime:

CFAbsoluteTime abstime = CFDateGetAbsoluteTime(reinterpret_cast<CFDateRef>(myNSDate));
long long      inttime = static_cast<long long>(abstime);

inttime = (inttime / seconds_per_day) * seconds_per_day; // clips the time to midnight

NSDate* myNSDateAtMidnight = reinterpret_cast<NSDate*>(CFDateCreate(NULL,
                                                       static_cast<CFAbsoluteTime>(inttime)));

today...両方とtomorrow真夜中に丸める関数にラップできます。

于 2009-08-27T03:16:01.117 に答える