1
NSDateComponents *components = [[[NSDateComponents alloc] init] autorelease];
[components setTimeZone:[ NSTimeZone timeZoneForSecondsFromGMT:(+0*3600) ] ] ;
[components setYear:2011];
[components setDay:13];
[components setMonth:5];
NSDate *date1 = [gregorianCalendar dateFromComponents:components];
NSDate *date2 = [[NSDate alloc] init];


    NSTimeInterval diff = [data2 timeIntervalSinceDate:date1];
    NSString *intervalString = [NSString stringWithFormat:@"%f", diff];
    int second = [intervalString intValue];
    int period = second/3600/24; 
    NSLog(@"period:%d", period);
    NSLog(@"date1:%@", data1);
    NSLog(@"date2:%@", data2);

コンソールでは、結果は次のとおりです。

2011-05-12 10:57:00.406 プロジェクト[297:707] 期間:0;

2011-05-12 10:57:00.375 プロジェクト[297:707] データ 2:2011-05-12 08:56:52 +0000

2011-05-12 10:57:00.402 プロジェクト[297:707] data1:2011-05-13 00:00:00 +0000

期間が「0」である理由がわかりません。「1」でなければなりません。手伝って頂けますか?

4

2 に答える 2

0

NSTimeIntervalは単なるdoubleであるため、文字列に変換してからintに戻す必要はありません。

このようなことをするとどうなりますか?

NSTimeInterval diff = [data2 timeIntervalSinceDate:date1];
int period = (int)diff/3600/24; 
NSLog(@"period:%d", period);

また、間隔がdiffが3600 * 24未満の場合、diff / 3600/24の結果は1未満になるため、int値は0にフラット化されます。

于 2011-05-12T09:19:06.247 に答える
0

date2 は現在の日付です。なぜここにいるperiod べきなのかわかりません。

この記事の執筆時点では、diff は約です。-53000。それを除算すると、期待どおりにゼロになります。

また、 NSTimeInterval は浮動小数点数であり、文字列を介して整数に変換していることに注意してください。これにより、分数が削除されます。

そして、文字列を介してこの変換を行う意味はありませんint seconds = (int) diff;- 単に使用してください。

とを参照しているように、コードを直接コピーして貼り付けてください。ただし、変数は と と呼ばれます。しかし、これらの変数が別の場所で宣言されている場合、これはすでにバグである可能性があります。data1data2date1date2

于 2011-05-12T09:21:55.633 に答える