質問

私は NSDate の電話文書セット、ディスカッションエリアで、彼らはしかし、彼らは別の場所にページ上の方法を文書化していない、-dateWithNaturalLanguageString:locale:を議論します。

私はiPhoneのための前の方法を使用していると私は警告を得たものの、それは、うまく働きました。今、私はこれで警告に遭遇しました(私はすべての^ _ ^に沿ってやっているはずです)-Werror付の建物だということ。

私は次のコード行を置き換えるだろうか?

NSDate *today = [NSDate dateWithNaturalLanguageString:@"today at 23:59:59"];
NSDate *tomorrow = [NSDate dateWithNaturalLanguageString:@"tomorrow at 23:59:59"];
役に立ちましたか?

解決

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

午後11時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];

午後11時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];

他のヒント

のは、仮定しましょう。

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];

与えられた日の深夜を取得するためには、NSDate*はフリーダイヤルCFDateRefするブリッジ、あなたが使用したいと思ういくつかの追加のAPIを提供していることを覚えておくことが重要です。特に、あなたがNSDateCFAbsoluteTimeCFDateGetAbsoluteTimeを変換することができます:

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)));

...あなたが真夜中にtodaytomorrowの両方を四捨五入する関数にラップすることができた。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top