2012-04-30 9 views
17

मैं केवल है, तो जैसे बैंकॉक या टोक्यो शहर का नाम, मैं कैसे [NSTimeZone timeZoneWithName:@"Asia/Tokyo"] जहां यह भी महाद्वीप है और में एक समयक्षेत्र पैरामीटर आपूर्ति कर सकते हैं शहर के सामने स्लेश?NSTimeZone -timeZoneWithName का उपयोग कैसे करें: Rails ActiveSupport से शहर के नाम के साथ?

मैंने पहले ही [NSTimeZone timeZoneWithName:@"Tokyo"] की कोशिश की है, यह काम नहीं करता है।

उत्तर

26

जवाब लोगों के लिए धन्यवाद, लेकिन ऐसा लगता है उन शहरों के नाम की तरह सिर्फ एक प्रारूप है कि रेल रहे हैं "ActiveSupport :: समय क्षेत्र" का उपयोग करता है। तो मुझे बस इसे वापस मैप करना होगा। मानचित्रण यहाँ है ->http://api.rubyonrails.org/classes/ActiveSupport/TimeZone.html

यह किसी अन्य स्वरूप में रेल "ActiveSupport :: TimeZone" प्रारूप से समय क्षेत्र के नक्शे कि आईओएस उपयोग करता है (उदाहरण के लिए "अंतर्राष्ट्रीय दिनांक रेखा वेस्ट" => "प्रशांत/मिडवे", "मिडवे द्वीप" => "प्रशांत/मिडवे", "समोआ" => "प्रशांत/पागो_Pago", ...)।

मैंने a plist file बनाया है जिसमें एक NSDictionary संपत्ति है जिसे आसानी से मैपिंग के लिए उपयोग किया जा सकता है।

संपादित करें: an updated version रेल 3.2 के लिए

+0

प्लिस्ट के लिए धन्यवाद। ट्विटर उपयोगकर्ता "time_zone" रूपांतरण के लिए बहुत उपयोगी है। – DavidAWalsh

+2

रेल 3.2 के लिए यहां एक अद्यतन संस्करण (उपयोग उदाहरण के साथ) है: https://gist.github.com/rjregenold/5243201 –

0

आपको इस प्रकार की समस्या को हल करने में उपयोगी http://www.geonames.org/ से डेटासेट और/या एपीआई मिल सकता है। उनके पास बड़ी संख्या में स्थानों के लिए सही ओल्सन टाइमज़ोन (जिसे 'एशिया/टोक्यो' कहा जाता है) है और आप या तो डेटा को डाउनलोड और wrangle कर सकते हैं, या अपनी आवश्यकता के अनुसार अपने एपीआई का उपयोग कर सकते हैं।

+0

धन्यवाद, लेकिन दुर्भाग्य से समय क्षेत्र डेटा मैं वहाँ पाया (http://download.geonames.org/export/dump/timeZones.txt) शहर के नाम रहा है से अलग-अलग नामों में हैं। तो मैं इसका उपयोग नहीं कर सकता। मैंने एक उत्तर पोस्ट किया है जिसे आप इसे देख सकते हैं :) – Hlung

1
NSArray *zones = [NSTimeZone knownTimeZoneNames]; 

यह सब आपके सिस्टम द्वारा समर्थित timeszones के सेट देता है।

आपको नीचे setTime जोन जैसा है, जिसे आपने पहले ही कोशिश की है।

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

हाँ, मुझे पहले से ही यह पता है। लेकिन मैं सिर्फ ** टोक्यो ** ** ** एशिया/टोक्यो ** में नहीं बदल सकता क्योंकि मेरे पास ऐसे नाम भी हैं जो मुझे '[NSTimeZone ज्ञात टाइमज़ोन नाम] से प्राप्त होंगे;'। – 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

आप सभी समय क्षेत्र नामों की सूची देख सकते हैं (उपयोग के उदाहरण के साथ) (धन्यवाद आरजे Regenold!)।

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

आशा है कि यह आपके लिए सहायक होगा।

0
NSString * TimeZoneName=[[NSTimeZone localTimeZone]name]; 
संबंधित मुद्दे