1

日付とタイムゾーンの仕組みを理解しているかどうかを明確にしたいだけです。

基本的に、NSDate に変換したい日付文字列 @"2008-07-06 12:08:49" があります。この日付と時刻は、現在のユーザーのタイム ゾーンが設定されているものに合わせたいと考えています。したがって、GMT または HST の場合でも、12:08:49 のままです。

日付が UNIX 形式の 1215382129 (UTC) で、タイム ゾーンがロンドン (GMT) に設定されている場合、NSLog() から出力される日付は次のようになります。

2008-07-06 12:08:49 +0100

次に、タイム ゾーンをハワイ (HST) に変更して同じ日付を出力すると、次のようになります。

2008-07-06 12:08:49 -1000

これは問題なく動作するようですが、ハワイ語で時刻を取得するには、時差 (-10 時間) を UNIX タイム スタンプに物理的に追加する必要があるという印象を受けました。これは必須ではありませんか?

UNIX時間が指している日付と時刻が何であれ、ユーザーがいるタイムゾーンに関係なく常に同じ日付と時刻を指しているということですか?

これが理にかなっていることを願っています!

編集

実際、NSDateFormatter は現在のタイムゾーンに応じて、その日付文字列に対して異なる UNIX タイムスタンプを作成していることに気付きました (Kevin Conner のおかげです!)。だから私は完全に間違っていました!! :-)

4

1 に答える 1

5

免責事項、私は主にJavaの男です。しかし、Cocoa はこの点で Java ライブラリのように機能しているようです。日付はゾーンのないタイムスタンプです。タイム ゾーンは、表示用の日付の書式設定のドメインにあります。つまり、内部形式はタイム ゾーンを考慮せず、すべて UTC です。タイムゾーンは人間にとって比較的便利なので、表示/解析側にあります。

setTimeZone:にメソッドがあることに気付きましたNSDateFormatter。フォーマットを実行する前に、フォーマッタでそれを呼び出してみてください。

于 2009-12-30T16:12:17.983 に答える