web-dev-qa-db-ja.com

NSTimeZone -timeZoneWithNameの使用方法:Rails ActiveSupport?

BangkokまたはTokyoのような都市名しかない場合、[NSTimeZone timeZoneWithName:@"Asia/Tokyo"]にタイムゾーンパラメータを指定すると、大陸と都市の前にスラッシュが表示されます。 ?

私はすでに[NSTimeZone timeZoneWithName:@"Tokyo"]を試しましたが、機能しません。

18
Hlung

回答者に感謝しますが、これらの都市名はRails "ActiveSupport :: TimeZone"が使用する形式にすぎないようです。したがって、マップし直す必要があります。マッピングはここにあります- > 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プロパティを含む plistファイル を作成しました。

編集: 更新バージョン (使用例付き)for Rails 3.2(RJ Regenoldに感謝!)

26
Hlung

すべてのタイムゾーン名のリストを表示できます。

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

これがお役に立てば幸いです。

12
tagirkaZ

それらがすべてアジアにある場合は、次のようなものを使用してみませんか。

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"]]
5
Chris
NSArray *zones = [NSTimeZone knownTimeZoneNames];

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

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

[NSTimeZone timeZoneWithName:@"Asia/Tokyo"];
1
Allamaprabhu
NSString * TimeZoneName=[[NSTimeZone localTimeZone]name];
0

http://www.geonames.org/ のデータセットやAPIは、この種の問題を解決するのに役立ちます。膨大な数の場所に対応する正しいオルセンタイムゾーン(「アジア/東京」と呼ばれます)があり、データを自分でダウンロードして整理するか、APIを使用して必要なものを取得できます。

0
Roger