19

バンコク東京のような都市名しかない場合、都市[NSTimeZone timeZoneWithName:@"Asia/Tokyo"]の前に大陸とスラッシュがある場所でタイムゾーンパラメータを指定するにはどうすればよい ですか?

私はすでに試し[NSTimeZone timeZoneWithName:@"Tokyo"]ました、それは動作しません。

4

6 に答える 6

27

回答ありがとうございますが、これらの都市名はRails "ActiveSupport::TimeZone"が使用する形式にすぎないようです。だから私はそれをマップし直す必要があります。マッピングはここにあります-> http://api.rubyonrails.org/classes/ActiveSupport/TimeZone.html

Railsの「ActiveSupport::TimeZone」形式からiOSが使用する別の形式にタイムゾーンをマッピングします(例:「InternationalDate LineWest」=>「Pacific/Midway」、「MidwayIsland」=>「Pacific/ Midway」、「Samoa」 => "Pacific / Pago_Pago"、...)。

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

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

于 2012-05-02T10:42:51.807 に答える
13

すべてのタイムゾーン名のリストが表示されます。

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

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

于 2012-09-19T11:13:24.830 に答える
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"]]
于 2012-04-30T12:37:58.947 に答える
1
NSArray *zones = [NSTimeZone knownTimeZoneNames];

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

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

[NSTimeZone timeZoneWithName:@"Asia/Tokyo"];
于 2012-04-30T12:04:15.640 に答える
0

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

于 2012-04-30T11:59:22.787 に答える
0
NSString * TimeZoneName=[[NSTimeZone localTimeZone]name];
于 2017-07-21T13:10:54.603 に答える