その24それが今日からの時間を表すことになる点で最大値を含むことになるダブル変数..
OK、あなたは、あなたがに追加する相対値を持っています絶対の値。追加作業が必要です。
まず、「今日は何ですか?」と決めなければなりません。それは12:01ですか?それがあれば、時間帯は? GMT?他に何か?あなたはにを持っています。なぜなら、GMTの午前12:01は午前12:01 EDTと同じではないからです。それで、今日は何ですか?
からまでの時間を測定する場所を決めたら、その時点を表すNSDate
を作成する必要があります。例えば
:
NSDate *rightNow = [NSDate date];
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *components = [calendar components:NSUIntegerMax fromDate:rightNow];
こちらはカレンダーに対して時間点を表すオブジェクトであるNSDateComponents
オブジェクトを与えます。この場合、現在のカレンダー(グレゴリオ暦ではありますが、必ずしもそうではありません)を使用しています。デフォルトのタイムゾーンは現在のタイムゾーンです。別のタイムゾーンを基準にする必要がある場合は、新しいNSTimeZone
オブジェクトを作成し、-[NSCalendar setTimeZone:]
を使用してカレンダーのタイムゾーンを設定します(日付コンポーネントを要求する前に)。
今、あなたは日付コンポーネントを持っていることを、我々は適切な時間に物事を「リセット」することができます
[components setHour:0];
[components setMinute:0];
[components setSecond:0];
その後、我々はそれの時間における絶対的なポイントにするためにNSDate
にそれを戻すことができます。
NSDate *startingPoint = [calendar dateFromComponents:components];
NOW 我々は我々の出発点を持っており、「今日から時間」に対処することができます。
今 NSInteger hourDelta = var1/24;
NSDateComponents *delta = [[NSDateComponents alloc] init];
[delta setHour:hourDelta];
、我々は絶対的な開始日に、この相対的な差を追加します:まず、私たちは、あるコンポーネントがしかし、多くの時間の違いを表現するために、オブジェクトの日付を作成します
NSDate *finalDate = [calendar dateByAddingComponents:delta toDate:startingPoint options:0];
と理由私たちは善良な市民だ(あなたがガベージコレクションを使用するか、ARCしてコンパイルしている場合を除き)、我々はメモリをクリーンアップするでしょう:
[delta release];
いくつかの重要な注意事項:
NSCalendar
は、「日」とは何を意味し、「時」が何であるかを定義しているため、すべての操作はNSCalendar
オブジェクトを介して行われます。 「1日に24時間、1時間に60分」と思うが、それは必ずしも真実ではない。 1日に10時間、1時間に10分の自分のカレンダーを作成できます。私が望むならば、私は「地球の1回転」以外のものとして「日」を定義することができます。 NSCalendar
はこれらすべてのルールを定義します。したがって、日付の相対的な操作(「時」や「日」を追加するなど)はカレンダーを介して行う必要があります。
NSDate
には-dateByAddingTimeInterval:
のようなメソッドがありますが、これは絶対的な間隔を扱っているときで、ではなく、の相対量です。
これはあまり意味がありません。 var1とは何ですか? 1970年から何分? –