1

ストップウォッチを組み込んだアプリに取り組んでいます。ストップウォッチが機能し、秒/分などが正しく表示されました。

しかし、私の問題は、タスクが完了したときにフルタイムで表示したいということです(このタスクは、1日、2時間、3分、4秒などで完了しました)

しかし、私がそれを行うときはいつでも、それは常に方程式に1日を追加します(たとえば、0日、0時間、2分、14秒である必要があります)が、1日、0時間、2分、14秒を出力します。

コード:

startDate = [[NSDate date] retain];
NSDate *currentDate = [NSDate date];
NSTimeInterval timeInterval = [currentDate timeIntervalSinceDate:startDate];
NSDate *timerDate = [NSDate dateWithTimeIntervalSince1970:timeInterval];

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"D' Days, 'H' Hours, 'm' Minutes and 's' Seconds'"];
[dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0.0]];
NSString *timeString = [dateFormatter stringFromDate:timerDate];
overtext2.text = timeString;
[dateFormatter release];
4

4 に答える 4

2

ここでNSDateを本当に悪用しているようです。

「余分な」日を取得する理由は、タイマーが1970年1月1日00:00:00に開始されたかのように、実際に日付と時刻を印刷しているためです。したがって、タイマーが4時間30分実行timerDateされる場合、1970年1月1日04:30:00になります。タイマーが40日間実行された場合、日数は超過しtimerDate、1970年9月2日00:00:00になり、「日数」の値は予想どおり40ではなく9になります。

日、時間、分、秒を手動で計算する方がよいでしょう。

NSDate *startDate; // When the timer was started
NSTimeInterval timerValue = [[NSDate date] timeIntervalSinceDate:startDate]; // Time in seconds from startDate to now
NSInteger secs = timerValue % 60;
NSInteger mins = (timerValue % 3600) / 60;
NSInteger hours = (timerValue % 86400) / 3600;
NSInteger days = timerValue / 86400;
NSString *timeString = [NSString stringWithFormat:@"%d days, %d hours, %d minutes and %d seconds.", days, hours, mins, secs];
于 2013-02-15T15:44:07.170 に答える
0
NSDate *timerDate = [NSDate dateWithTimeIntervalSince1970:timeInterval];

これにより、1970年に秒数が追加され、その時間を日:時間:分:秒に変換します。これは決して発生しません。

または、次のようにすることもできます。

NSInteger seconds=timeInterval;//timeInterval float converted to long.
NSInteger secs = seconds% 60;
NSInteger mins = (seconds% 3600) / 60;
NSInteger hours = (seconds% 86400) / 3600;
NSInteger days = seconds/ 86400;
NSString *timeString = [NSString stringWithFormat:@"%d days, %d hours, %d minutes and %d seconds.", days, hours, mins, secs];
于 2013-02-15T15:38:25.070 に答える
0

日時の加算について聞いたことがありますか..?それは私がしたケースの1つで問題を引き起こしていました。したがって、日付を加算または減算する必要がある場合は、常にNSDateComponentsを使用することをお勧めします。それはそれを行う正しい方法です..それでそれを試してみて、それが機能するかどうかを確認してください..

于 2013-02-15T15:55:17.383 に答える
0

答えは問題であるドキュメントにあります

d1..21日付-月の日D1..3345年の日

あなたの場合、計算した間隔は正しい秒数ですが、その日はその年の最初の日です。

次のようにコードを変更して月を含めると、1(1月の場合)も取得されます。

[dateFormatter setDateFormat:@"D' Days, 'M' Months, 'H' Hours, 'm' Minutes and 's' Seconds'"];
于 2013-02-15T16:03:40.503 に答える