0

私は奇妙な状況で戦っています。同じコードが2つの異なるプロジェクトで異なって機能します。1つのプロジェクトは、このコードを使用した空のコマンドラインユーティリティです。2番目のプロジェクトは、リンクされたgdata-objectivec-clientライブラリを使用しています。

コードは次のとおりです。

static NSString * const dateFormat = @"MM/dd/yyyy HH:mm:ss Z";
NSString *tmp_string = @"03/08/2011 10:07:36 +0300";

NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease] ;    
[dateFormatter setLocale:[[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"] autorelease]];
[dateFormatter setDateStyle:NSDateFormatterMediumStyle];
[dateFormatter setDateFormat: dateFormat ];

NSDate *newDate = [dateFormatter dateFromString: tmp_string];
NSLog(@"dateFromThatString: %@", newDate);

コマンドラインユーティリティだけで結果は同じです

「2011年3月8日10:07:36+0300」

ただし、gdata-objectivec-clientがリンクされているプロジェクトでは、結果は次のように変更されます。

"2011年3月8日07:07:36+0000"

何が問題なのかわからない、何か提案はありますか?

4

2 に答える 2

1

このテーマについて読んで、「NSDateはタイムゾーンを認識せず、常にタイムゾーンに依存しない方法で(特定の参照日からの期間として)日付を格納する」ことを学びました。したがって、これら2つのNSDateオブジェクトは2つの異なる2つの異なるプロジェクトの文字列は同じであり、NSDateオブジェクトの説明の違いに問題があります。したがって、簡単なデバッグのためにのみこれらの説明が必要だったため、今後の作業では大きな問題にはなりません。descriptionメソッドではなく、[NSFormatted stringFromDate:]を使用します。

gdata-objectivec-clientがプロジェクトにどのように影響したかは興味深いです。nsdateobjの記述は同時に返されますが、+0000gmtオフセットに応答します。

しかし、それは議論のためだけです。

于 2011-03-21T09:22:18.717 に答える
0

日付フォーマッタには、それぞれ異なるタイムゾーンがあるようです。を使用してタイムゾーンを変更できます-[NSDateFormatter setTimeZone:]

于 2011-03-18T15:17:32.277 に答える