現在の日付から何ミリ秒かを調べようとしています。日付を無視してミリ秒単位で時間を返すメソッドが見つからないので、timeIntervalSince 1970 メソッドによって返される値から計算できると考えました。
これは私がしました:
NSLog(@"%f", [[NSDate date] timeIntervalSince1970]);
2013-05-21 16:29:09.453 TestApp[13951:c07] 1369171749.453490
ここで、私の仮定では86,400 seconds
、1 日には があるので、この値を で割り86400
、1970 年から何日経過したかを取得できます。これを行うと、 が得られます15846.8952483 days
。さて、もし私の仮定が成り立つなら、私は89.52483%
今日一日を過ごしています。したがって、複数の場合、または約24 hours by 86.52659%
の現在の時刻が得られます。ご覧のとおり、これはリアルタイムから約 5 時間ですが、返される間隔は私のタイム ゾーンより 5 時間進んでいると思います。21.4859592 hour
09:29 PM
NSLog
GMT
だから私は、まあまあ、私はただそれを転がして何が起こるか見てみようと考えました。
次のようにして小数点以下を切り捨てました。
float timeSince1970 = [[NSDate date] timeIntervalSince1970]/86400.0;
timeSince1970 = timeSince1970 - (int)timeSince1970
次に、今日までに発生したミリ秒を計算します。
int timeNow = timeSince1970 * 86400000;
NSLog(@"%i", timeNow);
2013-05-21 16:33:37.793 TestApp[14009:c07] 77625000
次に、ミリ秒 (それでも適切と思われる) を次のように変換しますNSDate
。
NSString *timeString = [NSString stringWithFormat:@"%d", timeNow];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];
[dateFormatter setDateFormat:@"A"]
NSDate *dateNow = [dateFormatter dateFromString:timeString];
NSLog(@"%@", dateNow);
2013-05-21 16:29:09.455 TestApp[13951:c07] 2000-01-02 03:29:00 +0000
そして、私の問題があります。2000-01-01
いくつかの時間と分が添付された日付を返すのではなく、日付を返してい2000-01-02
ます。どうして!?
編集
上記でメモした余分な 5 時間を「削除」することで、次のように機能するようになりました。
int timeNow = (timeSince1970 * 86400000) - (5 * 60 * 60 * 1000);
なぜこれが必要なのかわかりません。誰かが説明できれば、私はそれを大いに感謝します。
編集2
おそらく、達成しようとしているタスクを達成する方法について、より基本的な質問をする必要があります。私は時間を気にします (たとえば、午後 4 時は重要ですが、日付はあまり気にしません)。これらを次によって作成された NSDates に保存しています。
[dateFormatter setDateFormat:@"hh:mm a"];
[dateFormatter dateFromString@"04:00 PM"];
これはすべてうまくいっているようです。ここで、現在の時刻を保存した時刻と比較し、それが NSOrderedAscending または NSOrderedDescending であるかどうかを調べ、それに応じて応答したいと考えています。これを達成するためのより良い方法はありますか?