5

NSDatesを使用して文字列から構築した配列があり[NSDate dateFromString] ます。xmlには、文字列を取得するために解析したもので、タイムゾーン文字列もありました。私がマニュアルで見ることができる限り、NSDateそれはタイムゾーンを自己処理しません。このタイムゾーン値を常にどこかに保存し、NSDate必要になるたびに所属するものとペアリングする必要がありますか?

また、ロンドンでイベントが10:00に開始された場合、デンマークにいて、iPhoneをデンマーク語に設定して「ロンドンで開始されたイベント」が09:00に表示されることも理解する必要があります。

繰り返しになりますが、イベントがロンドンで10:00に開始し、デンマークで12:00に終了する場合、デンマークの設定でiPhoneを使用して開始時刻と終了時刻を比較すると、イベントは02:00イベントでしたが、英国では10:00時、デンマークでは12:00時はわずか1時間の間隔です。

NSdate1つのタイムゾーンの範囲内でこれらのことに対して非常にうまく機能しますが、タイムゾーンの部分を導入すると、すべてが複雑になりました。多くの間違いを犯す可能性があるので、これらすべての計算を抽象化/非表示にする方法はありますか?

私はAppleのNSDateformatterガイドとNSDateガイドを読んだことがありますが、それらは本当にあいまいで、かなりの量の非推奨コードを備えています:/

助けてくれてありがとう。

4

4 に答える 4

1

すべての計算には、UTC/GMT形式のような1つの標準タイムゾーンを使用する必要があります。

于 2010-01-13T09:21:54.967 に答える
1

NSDate リファレンスによると、dateWithString:最後のコンポーネントとして GMT へのオフセットを取得します。タイムゾーンではありませんが、計算または比較を実行するには十分です)。

NSTimeZone リファレンスを見ると、abbreviationForDate:とを使用してインスタンスからオブジェクトtimeZoneWithAbbreviation:を取得できます。タイムゾーンを取得したら、必要なものはすべて揃っています。NSTimeZoneNSDate

于 2010-01-13T09:49:48.377 に答える
1

現在の日付と近いか知りたい日付をGMTに換算して差を返します。そのため、実際の時間と日付ではなく、違いに対処するためにすべてを変更しました。別のキーに移調された楽譜のようなものです:)

+ (NSInteger) minutesUntilDate:(NSDate*) date withTimezoneOffset:(NSInteger) GMTOffset     
{

 NSDate *now = [NSDate date];
 NSTimeInterval localTimeZoneOffset = [[NSTimeZone defaultTimeZone] secondsFromGMT];

 now = [now addTimeInterval:(localTimeZoneOffset * -1)];

 date = [date addTimeInterval:(GMTOffset * 60 * 60) * −1];

 return ((NSInteger)[now timeIntervalSinceDate:date] / 60 ) * -1;
}
于 2010-01-14T17:49:11.250 に答える
0

NSDate を割り当てるとすぐに、これらにはタイムゾーン情報がなくなります。NSDate は「タイムゾーンなし」で、常に GMT です。割り当てるときに、NSDate がフォーマットを正しく理解していることを確認する必要があります。

NSDate を取得したら、通常の計算を行い、タイムゾーンを無視できます。

文字列を NSDates に読み込むときと、それらを出力するときだけ、タイムゾーンに注意する必要があります。

于 2010-01-14T16:28:09.967 に答える