2012-04-30 15 views
17

は私だけバンコクまたは東京のような都市名を持っている場合、どのように私はそれはまた、都市の前に大陸とスラッシュた [NSTimeZone timeZoneWithName:@"Asia/Tokyo"]にタイムゾーンのパラメータを指定することができますか?NSTimeZone -timeZoneWithNameを使用するには:Rails ActiveSupportの都市名を使用しますか?

私は既に[NSTimeZone timeZoneWithName:@"Tokyo"]を試しましたが、うまくいきません。

答えて

26

おかげで、しかし、それらの都市名がRailsのちょうどフォーマットされているように見える "activesupportの::タイムゾーンは、" 使用しています。だから私は戻ってそれをマップする必要があります。 - >http://api.rubyonrails.org/classes/ActiveSupport/TimeZone.html

RailsのActiveSupport :: TimeZone形式からiOSが使用する別の形式(たとえば、 "International Date Line West" => "Pacific/Midway"、 "Midway Island" => "Pacific/Midway"、 "Samoa" => "Pacific/Pago_Pago"、...)。

マッピング用に簡単に使用できるNSDictionaryプロパティを含むa plist fileを作成しました。

編集:Railsの3.2のためのan updated version(使用例付き)(!ありがとうRJ Regenold)

+0

plistに感謝します。 Twitterユーザーの "time_zone"変換に非常に便利です。 – DavidAWalsh

+2

Rails 3.2のアップデートされたバージョン(使用例あり):https://gist.github.com/rjregenold/5243201 –

0

のデータセットやAPIは、この種の問題を解決するのに役立ちます。彼らは膨大な数の場所で正しいオルセンのタイムゾーン(「アジア/東京」と呼ばれています)を持っており、自分でデータをダウンロードしたり、APIを使って必要なものを手に入れることができます。

+0

おかげで、残念ながら、私はそこに見つけタイムゾーンデータ(http://download.geonames.org/export/dump/timeZones.txtは)私が持っている都市名と異なる名前です。だから使えない。私はあなたがそれをチェックアウトすることができます答えを投稿しました:) – Hlung

1
NSArray *zones = [NSTimeZone knownTimeZoneNames]; 

システムでサポートされているすべてのタイムゾーンを返します。

あなたはすでに試した、以下のようなsetTimeゾーンが必要です。

[NSTimeZone timeZoneWithName:@"Asia/Tokyo"]; 
+0

ええ、私はすでにそれを知っています。しかし、** Tokyo **を** Asia/Tokyo **に変更することはできません。なぜなら、私は '[NSTimeZone knownTimeZoneNames];から得るものと全く違う名前を持っているからです。 – Hlung

5

彼らはすべてアジアにいる場合は、その理由のようなものを使用していない:あなたはより多くの都市とタイムゾーンが必要な場合は、すべてのタイムゾーンに基づいて静的なテキストリストファイルを作成することができ

MYCITY=Tokyo 
[NSTimeZone timeZoneWithName:@"Asia/$MYCITY"] 

/usr/share/zoneinfoにあります。

ファイル 'timezones.by.city.txt'を次のテキストで作成します。

"Asia/Aden" 
"Asia/Almaty" 
"Asia/Amman" 
"Asia/Anadyr" 
"Asia/Aqtau" 
"Asia/Aqtobe" 
"Asia/Ashgabat" 
"Asia/Ashkhabad" 
"Asia/Baghdad" 
"Asia/Bahrain" 
"Asia/Baku" 
"Asia/Bangkok" 
"Asia/Beirut" 
"Asia/Bishkek" 
... etc. 
"US/Alaska" 
"US/Aleutian" 
"US/Arizona" 
"US/Central" 
"US/Eastern" 
"US/East-Indiana" 
"US/Hawaii" 
"US/Indiana-Starke" 
"US/Michigan" 
"US/Mountain" 
"US/Pacific" 
"US/Pacific-New" 
"US/Samoa" 

そして、(。ここでは切り捨て):答えの男性のための

MYCITY=Bangkok 
MYTZ=`grep "$MYCITY" ./timezones.by.city.txt` 
[df setTimeZone:[NSTimeZone timeZoneWithName:@"$MYTZ"]] 
+0

いいえ、それらはすべてアジアにあるわけではありません。そしてこの 'grep'は何ですか? – Hlung

+0

詳細を教えてください – Hlung

10

あなたはすべての時間帯名のリストを見ることができます。

NSLog(@"%@", [NSTimeZone knownTimeZoneNames]); 

ご希望の場合は、こちらをご覧ください。

0
NSString * TimeZoneName=[[NSTimeZone localTimeZone]name]; 
関連する問題