2012年10月12日金曜日

1日は24×60×60秒とは限らない

24×60×60=86,400秒 ではない日 というのは、
サマータイム や DST(daylight saving time) の開始日/終了日。

本日の日付の00時00分00秒を起点にして、
1日後は + 24×60×60
2日後は + 2 × (24×60×60)
のような感じで作っていくと、計算が合わなくなります。

カレンダーを使って、ちゃんと日付をとりましょう。

NSCalendar *cal = [[NSCalendar alloc]initWithCalendarIdentifier:NSGregorianCalendar];
NSDate *today = [NSDate date];

NSDateComponents *components = [cal components:NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit fromDate:today];
components.day += 1;
 NSDate *tomorrow = [cal dateFromComponents:components];

かく言う私は、このバグを埋め込んでしまった人。
時間で足した方が、処理も早いやん!と単純な発想でミス。

「英語圏の人はIMEに不具合いれてくるわー」とぼやいていた私ですが、逆に私もやってしまった感。
気をつけます...
• • •