119

2010 年 1 月 1 日から (たとえば) 2010 年 2 月 3 日までの日数を計算するにはどうすればよいですか?

4

9 に答える 9

242
NSDate *date1 = [NSDate dateWithString:@"2010-01-01 00:00:00 +0000"];
NSDate *date2 = [NSDate dateWithString:@"2010-02-03 00:00:00 +0000"];

NSTimeInterval secondsBetween = [date2 timeIntervalSinceDate:date1];

int numberOfDays = secondsBetween / 86400;

NSLog(@"There are %d days in between the two dates.", numberOfDays);

編集:

オブジェクトNSDateは正確な瞬間を表し、関連付けられたタイムゾーン情報を持たないことに注意してください。を使用して文字列を日付NSDateFormatterNSDateFormatter変換すると、 は構成されたタイムゾーンから時刻を変換します。したがって、2 つのNSDateオブジェクト間の秒数は、常にタイムゾーンに依存しません。

さらに、このドキュメントでは、Cocoa の時刻の実装ではうるう秒が考慮されていないことが明記されているため、そのような精度が必要な場合は、独自の実装を作成する必要があります。

于 2010-12-06T23:58:55.973 に答える
85

次のようなものを使用することをお勧めします。

NSDateComponents *components;
NSInteger days;

components = [[NSCalendar currentCalendar] components: NSDayCalendarUnit 
        fromDate: startDate toDate: endDate options: 0];
days = [components day];

この方法は、夏時間の変更にまたがる日付などの状況を考慮していると思います。

于 2010-12-07T03:15:49.663 に答える
25
NSTimeInterval diff = [date2 timeIntervalSinceDate:date1]; // in seconds

date1date2ですNSDate

また、 の定義に注意してくださいNSTimeInterval

typedef double NSTimeInterval;
于 2010-12-06T23:00:07.513 に答える
0

違いを見つけるには、現在の日付と将来の日付を取得する必要があります。次の例では、未来の日付の例として 2 日を使用しました。計算式:

2 days* 24 hours* 60 minutes* 60 seconds. 2 日間の秒数は 172,800 秒になると予想されます。

// Set the current and future date
let now = Date()
let nowPlus2Days = Date(timeInterval: 2*24*60*60, since: now)

// Get the number of seconds between these two dates
let secondsInterval = DateInterval(start: now, end: nowPlus2Days).duration

print(secondsInterval) // 172800.0
于 2020-04-24T15:12:23.897 に答える