0

にいくつか問題がありNSDateます。

私が持っているコードは次のようになります:

NSDate *date    = [NSDate dateWithTimeIntervalSinceNow:logout];

このコードにブレークポイントを置き、マウスを上に移動すると、次のように表示されます

2013-01-28 18:25:27 SGT

しかし、いつNSLog日付

私はこれを得る:

2013-01-28 10:25:27

これはなぜですか?正しいものをどのように表示しますか?

4

3 に答える 3

2

この問題は、NSDate が「生の」日付であるためです。それがGMTである理由です

あなたはこれを試すことができます、

NSDate* sourceDate = [NSDate dateWithTimeIntervalSinceNow:logout];

NSTimeZone* sourceTimeZone = [NSTimeZone timeZoneWithAbbreviation:@"GMT"];
NSTimeZone* destinationTimeZone = [NSTimeZone systemTimeZone];

NSInteger sourceGMTOffset = [sourceTimeZone secondsFromGMTForDate:sourceDate];
NSInteger destinationGMTOffset = [destinationTimeZone secondsFromGMTForDate:sourceDate];
NSTimeInterval interval = destinationGMTOffset - sourceGMTOffset;

NSDate* destinationDate = [[NSDate alloc] initWithTimeInterval:interval sinceDate:sourceDate];

これにより、現在のタイムゾーンが表示されます

于 2013-01-28T09:43:44.513 に答える
1

NSDate は、特定のプロパティ (タイムゾーンなど) を持つ日付を表すオブジェクトを定義します。日付を表示したい場合は、その年だけを表示するか、時間と分だけを表示するかを選択できます (これはすべてNSDateFormatterクラスを使用して実行できます)。あなたがしているのは、オブジェクトを LLDB に出力することです。これはおそらく日付の UTC バージョンを示しているので、同じインスタンスのデバッガーの概要が異なる時間を示していることに驚かないでしょう。

この日付で何をする必要があるかを決定し、それに応じてタイムゾーンを設定し、フォーマットしてコンソールに出力します。

于 2013-01-28T09:32:03.993 に答える