私はこの方法を使用して、月と年を、指定された年の月の最後の日に等しい日付に変換しています。
+ (NSDate*)endOfMonthDateForMonth:(int)month year:(int)year
{
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *comps = [[NSDateComponents alloc] init];
comps.year = year;
comps.month = month;
NSDate *monthYearDate = [calendar dateFromComponents:comps];
// daysRange.length will contain the number of the last day of the endMonth:
NSRange daysRange = [calendar rangeOfUnit:NSDayCalendarUnit inUnit:NSMonthCalendarUnit forDate:monthYearDate];
comps.day = daysRange.length;
comps.hour = 0;
comps.minute = 0;
comps.second = 0;
[comps setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
[calendar setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
[calendar setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]];
NSDate *endDate = [calendar dateFromComponents:comps];
return endDate;
}
日付に00:00:00の時間コンポーネントを設定したいので、タイムゾーンをGMT 0に設定し、分、時間、秒の日付コンポーネントを0に設定しました。メソッドから返される日付は正しく、 00:00:00からの時間コンポーネント。
これが私がCoreDataに日付を保存する方法です:
NSDate *endDate = [IBEstPeriod endOfMonthDateForMonth:endMonth year:endCalYear];
[annualPeriod setEndDate:endDate];
データを取得してデバッガコンソールにNSLロギングした後2008-12-30 23:00:00 +0000
、時間コンポーネント!=0のような日付を取得します。
コンポーネントが変更されたのはなぜですか?00:00:00にとどまるべきではありませんか?
ここで何を間違ってコーディングしましたか?
ありがとうございました!!