NSDate -dateWithNaturalLanguageString:iPhoneの?
-
20-09-2019 - |
質問
私は 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を提供していることを覚えておくことが重要です。特に、あなたが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
の両方を四捨五入する関数にラップすることができた。
所属していません StackOverflow