2012-04-30 23 views

Trả lời

26

Thanks for the guys câu trả lời, nhưng có vẻ như những tên thành phố chỉ là một định dạng mà Rails "ActiveSupport :: TimeZone" sử dụng. Vì vậy, tôi chỉ cần bản đồ nó trở lại. Lập bản đồ ở đây ->http://api.rubyonrails.org/classes/ActiveSupport/TimeZone.html

Nó ánh xạ múi giờ từ định dạng Rails "ActiveSupport :: TimeZone" sang định dạng khác mà iOS sử dụng (ví dụ: "Ngày quốc tế dòng phương Tây" => "Thái Bình Dương/Midway", "Đảo Midway" => "Thái Bình Dương/Midway", "Samoa" => "Pacific/Pago_Pago", ...).

Tôi đã tạo a plist file chứa thuộc tính NSDictionary có thể dễ dàng được sử dụng để lập bản đồ.

Edit: an updated version (với ví dụ sử dụng) cho Rails 3.2

+0

Cảm ơn bạn đã theo dõi. Rất hữu ích cho chuyển đổi "time_zone" của người dùng Twitter. – DavidAWalsh

+2

Đây là phiên bản cập nhật (với ví dụ sử dụng) cho Rails 3.2: https://gist.github.com/rjregenold/5243201 –

0

Bạn có thể tìm thấy tập dữ liệu và/hoặc API từ http://www.geonames.org/ hữu ích trong việc giải quyết loại vấn đề này. Họ có múi giờ olsen chính xác (gọi là 'Asia/Tokyo') cho một số lượng lớn địa điểm và bạn có thể tải xuống và tự mình sắp xếp dữ liệu hoặc sử dụng API của họ để có được những gì bạn cần.

+0

Cảm ơn, nhưng tiếc là dữ liệu múi giờ tôi tìm thấy ở đó (http://download.geonames.org/export/dump/timeZones.txt) có tên khác với tên thành phố mà tôi có. Vì vậy, tôi không thể sử dụng nó. Tôi đã đăng một câu trả lời bạn có thể kiểm tra nó ra :) – Hlung

1
NSArray *zones = [NSTimeZone knownTimeZoneNames]; 

Nó trả về tất cả các múi giờ được hệ thống của bạn hỗ trợ.

Bạn phải setTime vùng như dưới đây mà bạn đã thử.

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

Vâng, tôi đã biết điều đó. Nhưng tôi không thể thay đổi ** Tokyo ** thành ** Asia/Tokyo ** vì tôi cũng có những cái tên hoàn toàn khác với những gì tôi nhận được từ '[NSTimeZone knownTimeZoneNames];'. – Hlung

5

Nếu tất cả họ đang ở châu Á, tại sao không sử dụng một cái gì đó như:

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

Nếu bạn cần biết thêm các thành phố và các múi giờ, bạn có thể tạo một danh sách tập tin văn bản tĩnh dựa trên tất cả các múi giờ tìm thấy tại/usr/share/zoneinfo.

tạo tệp 'timezones.by.city.txt' bằng văn bản sau. (Cụt ở đây.)

"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" 

Sau đó:

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

Không, chúng không phải tất cả ở châu Á.Và cái thứ 'grep' này là gì? – Hlung

+0

Vui lòng giải thích thêm – Hlung

10

Bạn có thể xem danh sách của tất cả các tên múi giờ (nhờ RJ Regenold!).

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

Hy vọng điều này sẽ hữu ích cho bạn.

0
NSString * TimeZoneName=[[NSTimeZone localTimeZone]name]; 
Các vấn đề liên quan