5

日付をかなり多用するコードをデバッグしようとしているため、デバッガーで多数の異なるNSDate値を比較しています。デバッガーはこれらの日付を UTC 形式で表示しています。たとえば、次のようになります。

date1 = (NSDate *) 0x01b11460 @"2012-02-15 18:55:00 +0000"

デバッグしているテストコードが使用しているように見えるので、ローカルタイムゾーンでそれらを表示すると、はるかに簡単になります。

ここでもっと基本的なものが欠けていると感じているので、誰かが私を啓発してくれることを願っています。前もって感謝します。

4

3 に答える 3

1

最終的に、最もうまく機能したのは、実際には、descriptionメソッドをオーバーライドして、現在のタイムゾーンで NSDate を表す文字列を返すだけの NSDate のカテゴリを追加することでした。また、デバッグ時にこのオーバーライドが必要なだけなので、DEBUG のみにしました。

使用した .h ファイルは次のとおりです。

#ifdef DEBUG

@interface NSDate (DebugHelper)

-(NSString *)description;

@end

#endif

および .m ファイル:

#ifdef DEBUG

#import "NSDate+DebugHelper.h"

@implementation NSDate (DebugHelper)

-(NSString *) description
{
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setTimeZone:[NSTimeZone systemTimeZone]];
    [dateFormatter setTimeStyle:NSDateFormatterShortStyle];
    [dateFormatter setDateStyle:NSDateFormatterShortStyle];
    return [dateFormatter stringFromDate:self];
}

@end

#endif

この回答につながった議論とアイデアについて、Jim Hayes と jrturton に感謝します。

于 2012-06-23T01:58:57.930 に答える
1

少し「ハック」ですが、NSDate のサブクラスを作成して、

-(NSString *)description;

必要に応じてフォーマットされた日付を返すメソッド。

デバッガーは特別なデコードを行っているわけではありません。表示したいオブジェクトの「説明」メソッドを呼び出しているだけです。便利なトリック... (これが、すべてのオブジェクトがデバッガーで表示するのに適した簡潔な説明を公開する理由です。)

于 2012-06-22T05:13:08.683 に答える
0

同じことをしましたが、systemTimeZone の代わりに localTimeZone を使用しました (少し優れている理由についてはドキュメントを参照してください)。また、dateFormatter オブジェクトを割り当てているが、決して解放していないことに気付きました。これはリークです。

私のカテゴリメソッドは次のとおりです。

-(NSString *) description;
{
    NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init]autorelease];

    NSLocale *enUSPOSIXLocale = [[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"] autorelease];
    [dateFormatter setLocale:enUSPOSIXLocale]; 
    [dateFormatter setTimeZone:[NSTimeZone localTimeZone]];
    [dateFormatter setDateStyle:NSDateFormatterLongStyle];
    [dateFormatter setTimeStyle:NSDateFormatterLongStyle];

    NSString *dateString = [dateFormatter stringFromDate:self];
    return dateString;
}
于 2013-01-15T04:26:43.997 に答える