-1

NSDate にタイムゾーン情報がないことはわかっています。

ただし、それらを適切に操作する方法を理解しようとしています。

現時点では、日付をオブジェクトに渡しています。その日付は、時刻 00:00:00 にユーザーが選択した日付です。

つまり、ユーザーが 10 月 21 日にヒットした場合、渡される NSDate は次のようになります。2013/10/21 00:00:00。

ただし、2013/10/20 23:00:00 ではありません。(1時間前)。

さて、これはそれらをフォーマットしたり表示したりすることではありません。私はちょうどNSDatesを使用しています。

NSDateComponentsと を使用して日付を作成していますNSCalendar

私の質問は...

NSDateローカル タイム ゾーンで が実際に参照している日付を確認するにはどうすればよいですか?

特定の日付の 00:00:00 と 23:59:59 の UNIX タイム スタンプを送信する必要があります。ただし、時、分、秒を 0、0、0 に設定した時点で、現在のタイム ゾーンで真夜中を取得していません。GMT で真夜中を取得しています。

これは私が欲しいものではありません。

修理済み?

わかりました、私はそれを修正しました...と思います。少なくとも、それは私がやりたいことをやっています。

トリックは...

NSTimeZone *timeZone = [NSTimeZone localTimeZone];
[dateComponents setSecond:timeZone.secondsFromGMT];
4

1 に答える 1

3

これには何度も戸惑いました。NSLogNSDate を実行すると、常に GMT で出力が得られます。したがって、表示されている 20/10/2013 23:00:00 (GMT)、予想される 21/10/2013 00:00:00 (BST) と同じです。これらの日付の両方の UNIX タイムスタンプは、タイムゾーンが考慮されていないため同じです。常に UTC です。

ユーザーが読み取り可能な形式で出力する場合はNSDateFormatter、現在のタイムゾーンとロケールを使用して日付をフォーマットします。

于 2013-10-21T16:00:14.747 に答える