0

2月中に探してみます。では、最終日が28日か29日かを知りたいのですが、3月末から引き算をしています。

NSDate* endFeb = [march dateByAddingTimeInterval: (NSTimeInterval) -24 * 3600];
NSDateComponents *feb = [gregorian components: units fromDate: endFeb];

正しい日付はわかりますが、正しい日ではありません

(gdb) po [gregorian dateFromComponents: feb]
2011-02-28 00:00:00 +0000
(gdb) p (int) [feb day]
$1 = 27

問題がある場合、これはiPad 4.3シミュレータにあります。

4

1 に答える 1

2

2 月が 28 日か 29 日かを調べるには、次のようにします。

NSCalendar *calendar = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease];

NSDateComponents *components = [[[NSDateComponents alloc] init] autorelease];
[components setYear:2008];
[components setMonth:2];
[components setDay:1];
NSDate *febDate = [calendar dateFromComponents:components];

NSRange range = [calendar rangeOfUnit:NSDayCalendarUnit inUnit:NSMonthCalendarUnit forDate:febDate];

NSLog(@"%u days in february", range.length);

これにより、タイムゾーンのオフセットをいじる必要がなくなります。これはあなたのコードの問題だと思います。

于 2011-04-01T22:39:38.047 に答える