お久しぶりです。
2つのNSDate間の年月日や、時分秒、年日など柔軟に取り出したかったのですが、これが自分で計算しようとすると結構面倒。最初は、NSTimeIntervalを出して、/60/60/24/365
して年数を出して、秒数から年数を引いた値を/60/60/24
して日数を出して。。。などやってましたが、このやり方すぐに破綻しますね。。うるう年考慮してないし、年月日をやりたいと思った時に、月の日数の算出のために別の方法を考えないといけない。
これやるためにいろいろ調べていたんですが、とあるサイトを確認した所、一瞬で解決しました。
NSCalendar *cal = [NSCalendar currentCalendar]; NSDateComponents *def = [cal components:NSYearCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit fromDate:[NSDate date] toDate:toDate options:0]; int year = [def year]; int day = [def day]; int hour = [def hour]; int minute = [def minute]; int second = [def second];
これですね。
あああー、って感じです。よくあるよくある!結局、iOS SDKの標準APIを見ていったほうが解決が早いっていう。
上記のメソッドでは当日からtoDate(NSDate)までの経過日数を年日時分秒で算出しています。結果として3年192日3時間4分5秒というような値が取得出来ます。もし、月を入れたければ、NSMonthCalendarUnitをcomponents引数のところに追加すれば、3年6ヶ月7日3時間4分5秒(日数は例として書きましたので正確ではありません)というように月数を考慮した日数を取得することが可能です。
このメソッドではうるう年も月数もカバーされていて、しかも、componentsの値を変えることで柔軟に値が取得できるので、ありがたいです。
そういうお話でした。