0

私は、Objective-C プログラミング、The Big Nerd Ranch Guide の課題に取り組んでいますが、その課題の 1 つに少し困惑しています。

NSDate の 2 つのインスタンスを使用して、何秒間生きているかを計算します。ヒント: 年、月などから新しい日付オブジェクトを作成する方法は次のとおりです。

そのため、現在と生年月日の差を秒単位で求める必要があります。いいですね。次に、ヒントが表示されます。

@autoreleasepool {
    NSDateComponents *comps = [[NSDateComponents alloc] init];
    [comps setYear:1981];
    [comps setMonth:7];
    [comps setDay:12];
    [comps setHour:1];
    [comps setMinute:55];
    [comps setSecond:33];

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

    NSDate *dateOfBirth = [g dateFromComponents:comps];

最初の問題は、私が何*gを意味するのか理解していないということです。NSCalendar オブジェクトへのポインターであることはわかっています。しかし、なぜそれが必要なのでしょうか? そして、何をg意味するのですか?

次に、サンプル コードはg変数を使用して日付を取得します。別の言語では、これはDateDiff(dateOne, dateTwo, interval). そもそも Calendar オブジェクトが必要な理由と、オブジェクトをフィードするために日付コンポーネントを作成する必要がある理由がよくわかりません。

これは私にとってまったく新しいことであり、過去に動的言語を扱ったことがあります。したがって、「ダミー」のような説明は素晴らしいでしょう!

4

2 に答える 2

3

このようにできます

NSDateComponents *comps = [[NSDateComponents alloc] init];
[comps setYear:1981];
[comps setMonth:7];
[comps setDay:12];
[comps setHour:1];
[comps setMinute:55];
[comps setSecond:33];

NSDate *dateOfBirth = [[NSCalendar currentCalendar] dateFromComponents:comps];


NSTimeInterval timeGap=[[NSDate new] timeIntervalSinceDate:dateOfBirth ];
于 2012-08-03T04:37:24.620 に答える
3

次に、サンプル コードは g 変数を使用して日付を取得します。別の言語では、これは DateDiff(dateOne, dateTwo, interval) と同じくらい簡単です。そもそも Calendar オブジェクトが必要な理由と、オブジェクトをフィードするために日付コンポーネントを作成する必要がある理由がよくわかりません。

私は Objective-C プログラマーではありませんが、日付/時刻 API については少し知っています。

あなたの生年月日/時刻を特定するために、1981 年、7 などの年を指定しています。1981 年とはどういう意味ですか? あなたにとっては、それは約 31 年前のことを意味するかもしれませんが、別の暦体系を使用している人にとっては、まったく別のことを意味する可能性があります。「年/月/日など」から「時点」への変換は、文字列から整数への変換に少し似ています。「10」は 10 を意味するのでしょうか、それとも 16 を意味するのでしょうか? それはすべて、参照フレーム (この場合はベース - 日付の場合の暦体系) に依存します。

グレゴリオ暦として初期化されたカレンダーは、これらの日付コンポーネントを取りNSDate、時間の一種の「絶​​対」値を返すことができます。

2 つの値の差の計算に関しては、NSDate「Unix エポックからの秒数」(または可能なミリ秒) のようなものを提供するメンバーがあると思われます。したがって、両方の日付 (生年月日と「現在」) からそれを取得し、一方を他方から引くと、2 つの間の経過秒数 (またはミリ秒) が得られます。

編集:実際、timeIntervalSinceNow生年月日を取得したら、関数はおそらく必要なものです。

于 2012-08-02T17:03:50.430 に答える