web-dev-qa-db-ja.com

NSTimeIntervalを適切に使用する方法は?

Xcodeを初めて使用しますが、次の問題があります。

ある日付から今までの時間を与えてくれる方法が欲しいです。 2年前の場合は「2年前」の文字列を返したいのですが、5分前の場合は「5分前」の文字列を返したいのです。

NSTimeIntervalとNSDateFormatterをすでに確認しましたが、それを機能させる方法が見つかりませんでした。

7
Joaocdn

始めるためだけに...

次のような参照日を作成します。

NSCalendar *gregorian = [[NSCalendar alloc]
                             initWithCalendarIdentifier:NSGregorianCalendar];

NSDateComponents *dateComponents = [[NSDateComponents alloc] init];
dateComponents.year = 2012;
dateComponents.month = 1;
dateComponents.day = 1;
dateComponents.hour = 0;
dateComponents.minute = 0;
dateComponents.second = 0;

NSDate *referenceDate = [gregorian dateFromComponents: dateComponents];

現在の日付は次のように取得できます。

NSDate *now = [NSDate date];

時間間隔は秒単位なので...

NSTimeInterval interval = [now timeIntervalSinceDate:referenceDate];
NSLog (@"reference date was %.0f seconds ago", interval);

これからは自分で理解できると思います...

この答え あなたを助けるかもしれません。

14
Rok Jarc

ありがとうございます。コードをそれほど多く行かなくても、もっと簡単な方法があるのではないかと思っていました。

次のように参照日を作成できます。

NSDate *referenceDate = [NSDate date];
[[NSCalendar currentCalendar] rangeOfUnit:NSYearCalendarUnit 
                                startDate:&referenceDate 
                                 interval:NULL
                                  forDate:referenceDate];

またはこれを試してください: https://github.com/billgarrison/SORelativeDateTransformer