2011-07-28 7 views
3

ラベルがあり、有効期限まで何回残っているかを表示したい。それはカウントダウンを続け、現在の時刻を更新します。有効期限はxmlファイルにこのように表示されます。NSTimerカウントダウンラベル

<満了> 20110803午前23時59分59秒< /有効期限>

現在の時刻と日付が20110728午前23時59分59秒で、有効期限はその後、午前23時59分59秒20110729 であれば、それは意味ラベルには1日00h 00:00が残ります。

は、だから私はそれがダウンカウントし、現在の時刻を更新し続けるでしょう。この enter image description here

のように表示したいです。誰もがこの問題にどのようにアプローチするか考えていますか? NStimerがこのような日付形式をどのように認識するのか分かりません。 20110803 23:59:59

+0

私の答えはあなたを助けましたか? –

答えて

3

ルックアップNSDateFormatterNSDateNSStringからANDに変換できるフォーマット文字列(-[setDateFormat:])を指定できます。

カウントダウンビューに戻るときは、NSDateFormatterではなく、カウントダウンラベルに必要な部分を取得するには、NSDateComponentsNSCalendarを使用するとよいでしょう。

NSDateComponents *countdown = [[NSCalendar currentCalendar] 
    components:(NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit) 
     fromDate:[NSDate date] 
     toDate:expiration 
     options:0]; 

これは、(デバイスの現在設定されているカレンダー設定を基準にして)すべての単位の違いを計算します。

[countdown day]または[countdown hour]のようなコールでコンポーネントを返すことができます。

+0

+1私はしばらくそれを試してみるつもりです。 – makaron

0

NSDateFormatterを使用すると、文字列からNSDateオブジェクトを簡単に取得できます。

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setDateFormat:@"yyyyMMdd' 'HH:mm:ss"]; 
[dateFormatter setTimeZone:[NSTimeZone localTimeZone]]; 
NSDate *date = [dateFormatter dateFromString:your_date_string]; 
0

NSDateformatterクラスを使用してNSStringからNSDateに日付を変換できます。今

NSString *dateString = @"20110803 23:59:59"; 
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 
[dateFormat setDateFormat:@"yyyyMMdd HH:mm:ss"]; 
NSDate *date = [dateFormat dateFromString:dateStr]; 

、カウントダウンするために、あなたは1秒ごとに発射するNSTimerクラスを使用し、その後、あなたは単にtimeIntervalSinceDateを使用することにより、現在の日付とあなたのdate変数間の秒の違いを得ることができます。

NSTimeInterval distanceBetweenDates = [currentDate timeIntervalSinceDate:yourDate]; 

ここでは、秒単位で違いを表示するため、表示する形式に変換します。

0

私はこの問題を深く掘り下げなかったため、申し訳ありませんが、私の答えが少し不合理な場合です。

この場合、NSDateを使用します。 NSDateFormatterを使用すると、xmlのテキストデータをNSDateに変換します。 NSDateの値を変更すると、NSTimerのすべてのティックが適切に変更されます。 とコードのビット、「NSDateFormatterのシンボルは、時には混乱を作成する原因:

NSString *xmlDateFormat = @"yyyyMMdd HH:mm:ss"; 
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
    [dateFormatter setDateFormat:xmlDateFormat]; 
    NSDate *yourDate = [dateFormatter dateFromString:timeStringFromXml]; 

これは、XMLから読み込みを行うためです。ティック時にNSDateの値を変更するには、NSDateの文書を見ることができます。そしてラベルの値を表示するために、私は算術的にすべての値を計算し、カジュアルなNSStringの助けを借りてそれを表示します:

[NSString stringWithFormat:@"%dday %dh %dm %ds", days, hours, minutes, seconds];