Cocoaでは、どのように私は、文字列としてオフセットシステムのタイムゾーンを取得するためにNSTimeZoneを使用していますか?
-
20-08-2019 - |
質問
PDTのために、私は "-0700" とよいでしょう。
私は前に何かが起こったのか長いかを決定するために過去の日付を取得しています。
NSDate *then = [NSDate dateWithString:@"1976-04-01 12:34:56 -0700"]; // Note the hard-coded time zone at the end
私は他の場所で日付文字列を構築することがありますが、私は、ローカルタイムゾーンにアクセスする方法がわからない。
私はココアだけでなく、NSTimeZoneとNSDateクラスの参照のためのアップルの日付と時刻のプログラミングトピックを読みますが、私は一緒に情報を掲載することはあまりにも難しいです。私は実際にはそれが使われているかを示すために数行のコードを使用することができます。
の の更新:これで苦労している間、私はので、私はすぐに物事を試みることができるコマンドラインテンプレートを使用してコードを書いていました。それはAppleが、このような基本的なクラスを変更することを知っていた混乱に追加した場合、申し訳ありませんの<:私はちょうどiPhone上で私の前のコードを試してみましたが、私はをNSDateが応答しないことがありそうだ「+ dateWithString」。 / P>
解決
タイムゾーンオフセットは、夏時間/サマータイムを使用しての世界 - それらの部分の多くの日付に依存しています。
唯一の正しい方法は、一緒に日付とタイムゾーンの文字列全体を生成することです。このためNSDateFormatterを使用します。
他のヒント
文字列からNSDateを構築するためにNSDateFormatter
を使用します:
NSDateFormatter *inputFormatter = [[NSDateFormatter alloc] init];
[inputFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss Z"];
NSDate *formatterDate;
formatterDate = [inputFormatter dateFromString:@"1976-04-01 12:34:56 -0700"];
NSString *dateString = [inputFormatter stringFromDate:formatterDate];
NSLog(@"date:%@", dateString);
あなたは、文字列からのローカルタイムを取得するこの方法で、文字列で指定された例の日付:
"1976年4月1日12時34分56秒-0700"
タイムゾーンにある - 0700
、(私はタイムゾーンGMT +1000にいる)ので、私は取得ます:
2009-11-17 22:13:46.480 CMDLINE [10593:903]日付:1976年4月2日 5時34分56秒+1000
最善の方法は、おそらく、単純なカレンダーのフォーマッタを使用することです。
NSCalendarDate * date = [NSCalendarDate calendarDate];
[date setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"PDT"]];
NSLog([date descriptionWithCalendarFormat:@"%z"]);
これが出力されます '-0700'
か、システム(あなたが求めていたかわからない)
の現在のタイムゾーンをしたい場合は、2番目の行を除外