2011-12-17 16 views
2

私は以下の日付を持っています:月= 12月、日= 01、年= 2011.日付は "111201"(YYMMdd)の形式のNSStringとして与えられます。今、私はNSDateFormatterとNSDateオブジェクトにこの文字列を解析したい:NSDateFormatterが意味を持たない

self.dateFormatter = [[NSDateFormatter alloc] init]; 
[self.dateFormatter setDateFormat:@"YYMMdd"]; 
NSDate* date = [self.dateFormatter dateFromString:strDate]; 

そして「111201」の出力は、「2011年11月30日午後十一時00分00秒0000」です。それは私には意味がありません。

これはどのように可能ですか?私は "2011-12-01 23:00:00 +0000"を期待しています。 GMTのオフタイムゾーンを修正するためにあなたの日付フォーマッタにこれを追加すること

+2

時刻情報を持たないので、特定の基本時刻を仮定してから、タイムゾーンオフセットを適用します。現地時間はどのように設定されていますか? –

+0

タイムゾーンの差は1ヶ月の差につながることはありません。 – samfisher

+0

@samfisher - 2つの日付の差はたかだか1日だけですが、これはおそらくタイムラインの問題です。 – jrturton

答えて

3

彼らは常にGMTの日付と時刻で示されています(それは最後の+0000が意味するものです)。

あなたのローカルタイムゾーンは '+0100'(西ヨーロッパ?)のように見えるので、日付フォーマッタは 'December 01 2011 00:00 am +0100'で動作し、NSDateを正しく作成します。しかし、現時点では、NSDate(タイムゾーン情報のない単一の時点)はGMTで表示され、同等のものは1時間早く、すなわち'11月30日23:00 pm +0000 'です。

あなたは本当に「111201」「2011年12月1日午後12時00分午前0000」に変換したい場合は

は、このようにGMTに日付フォーマッタのタイムゾーンを設定する:あなたは日付で読んでいるように見えます

self.dateFormatter.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0]; 
+0

意味があります。だから、本当の問題は全くありません。 NSDate記述の出力だけが「間違った」日付を表示しますか? – toom

+0

正確に - 「間違った」日付でないことを除いて - 「December 01 2011 00:00 am +0100」は「November 30 2011 23:00 pm +0000」と全く同じです。 –

+0

要約 - NSDatesはタイムゾーンニュートラルです。タイムゾーンを考慮するには、変換のポイント(文字列から日付または文字列への変換)に注意するだけです。 –

0

試してください:あなたはのNSLogを経由して、デバッガや出力それらの値でNSDateオブジェクトを表示する場合

self.dateFormatter.timeZone = [NSTimeZone systemTimeZone]; 
+0

ヒントをありがとう。 setTimeZone:[NSTimeZone localTimeZone]、setTimeZone:[NSTimeZone systemTimeZone]と違いはありません。 – toom

+0

Bummer。変換中に明示的に時刻を00:00:00に設定するとどうなりますか? – Bek

関連する問題