2009-06-27 4 views
1

PDTについては、「-0700」が必要です。Cocoaでは、NSTimeZoneを使用してシステムタイムゾーンのオフセットを文字列として取得するにはどうすればよいですか?

私は過去に何かが起こったかを判断するために過去に日付を取得しています。

NSDate *then = [NSDate dateWithString:@"1976-04-01 12:34:56 -0700"]; // Note the hard-coded time zone at the end 

私は、他の場所で日付文字列を作成していますが、ローカルタイムゾーンへのアクセス方法はわかりません。

私はCocoaのApple Dates and Times Programming TopicsとNSTimeZoneとNSDate Class Referencesを読んでいますが、情報をまとめるのは難しいです。私は実際にそれがどのように使用されているかを示すために、ほんの数行のコードを使用することができます。

更新:これに苦労しながら、私はコマンドラインテンプレートを使ってコードを書いていたので、すばやく試すことができました。私はちょうど前のコードをiPhoneで試したところ、NSDateは '+ dateWithString:'に応答しないかもしれません。アップルがこのような基本クラスを変更することを知っていたのは混乱しました。

答えて

2

タイムゾーンのオフセットは、世界のほとんどの日付(夏時間/夏時間を使用する部分)に依存します。

唯一の正しい方法は、日付と時間帯の文字列全体を一緒に生成することです。 NSDateFormatterを使用してください。文字列からNSDateを構築するための

-1

最良の方法は、おそらく、単純なカレンダーのフォーマッタ出力「-0700」

たり、システムの現在のタイムゾーンをしたい場合は、2番目の行を残す(意志

NSCalendarDate * date = [NSCalendarDate calendarDate]; 
[date setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"PDT"]]; 
NSLog([date descriptionWithCalendarFormat:@"%z"]); 

を使用することです

+0

フォーマッタはありません。 NSCalendarDateは非推奨の予定です。 –

+0

だから、それはiPhone APIのようにも見えません – cobbal

4

使用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-04- 01 12時34分56秒-0700"

タイムゾーンにある - 、0700(私はタイムゾーンにGMT +1000だ)ので、私が得る:

2009-11-17 22:13:46.480 CMDLINE [10593:903]日付:1976年4月2日 五時34分56秒+1000

関連する問題