2011-08-03 16 views
0

Objective-CのDouble値をDate値に変換する必要があります。 多くの方法を試しましたが、取得できませんでした。ここvar1Objective-CのDouble値をDate値に変換する方法

date=var1/24; 

可変日付に日付として24で分割して格納されるべきであるdouble値です。 Objective-Cを使ってこれをどうすればできますか?私はこれを行うことができますどのように

NSDate *date=[[NSDate alloc]init]; 
date=(nsdate)var1/24; 

は、私はこのような日付変数を作成しましたか?

+2

これはあまり意味がありません。 var1とは何ですか? 1970年から何分? –

答えて

0

正確に何をしたいのかによって異なりますが、(nsdate)var1/24という直接のキャストは間違いなくで、となります。

あなたの変数var1はどういう意味ですか?分?秒?時間?どの基準日からですか?今日? UNIXエポック?それはUNIXタイムスタンプですか(1970年1月1日からの秒)ですか?

これらの質問の答えに応じて、どちらかのNSDateComponentsを使用して、異なる日付コンポーネント(月、日、月、日、年など)を与える日付を生成することができます。時間、分、秒、...)、またはUNIXのタイムスタンプからdateWithTimeIntervalSince1970を使用してNSDateを作成するか、必要に応じてNSDateまたはNSDateComponentsの他のメソッドを使用します。

問題がある場合は、をお読みください*Date and TIme Programming Guide !! ここでは日付の操作についてすべてについて説明します。それはあなたの質問に答えるために必要なものすべてを含んでいます。

+0

その二重変数.. 24までの値を含んでいます。今日からHOURSを表します。 – smilu

+0

'' 'NSDate'''クラスのリファレンス文書でメソッドを使わないのはなぜですか?特に '' 'dateWithTimeIntervalSinceNow:' ''、それから今の間隔(秒)を渡しますか?あなたの時間数に3600を掛けて渡すtimeIntervalパラメータを秒単位で取得するだけです。 – AliSoftware

+0

とにかく「今」には現在時刻が含まれています。答えはそれほど正確ではありませんでした。「今日0:00:00」または「今日、現在時刻」から時間を計算しますか?真夜中の場合は、NSDateComponentsメソッドを使用する必要があります。上記の「プログラミングガイド」を参照してください。**すべて**詳細については、実際に説明しています。例えば。現在の日付をNSDateComponents(年月日、時刻情報なし)に分解し、 "時"コンポーネントを '' 'var1/24'''に変更し、' '' dateFromComponents: '' 'を使用して、出力日。 – AliSoftware

1

その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:のようなメソッドがありますが、これは絶対的な間隔を扱っているときで、ではなく、の相対量です。
+0

Tanxたくさん.. :) – smilu

関連する問題