سؤال

من ما أفهمه، اتصل

NSLog(@"Local Time Zone %@",[[NSTimeZone localTimeZone] name]);

يمنحك المنطقة الزمنية المحلية للجهاز. ما يعطيني هو "الولايات المتحدة / المركزي", ، ولا يمكنني العثور على ذلك في أي مكان في قائمة الاختصارات في اختصار nstimezoneDictionary, أو قائمة أسماء المناطق الزمنية في nstimezone mearmezonzonensames. وبعد أين يأتي هذا واحد من؟ أحتاج إلى اجتياز المنطقة الزمنية الحالية إلى تطبيق القضبان، ويفهم أشياء مثل "أستراليا / سيدني" أو "أمريكا / شيكاغو", ، لكن لا "الولايات المتحدة / المركزي".

كيف يمكنني أخذ ما يعطيني LocalTimezone وتحويله إلى سلسلة يمكن أن يفهمها القضبان (أي أي منطقة زمنية في المعروفة، والتي هي مفترض أن تكون جميع أسماء المنطقة الزمنية التي يعرفها النظام؟)

هل كانت مفيدة؟

المحلول

من المحتمل أنك تستخدم ActiveSupport::TimeWithZone دون الحاجة إلى tzinfo جوهرة:

$ irb -rrubygems -ractivesupport -rtzinfo
>> Time.send(:get_zone, "US/Central").now
=> Tue, 17 Nov 2009 04:27:23 CST -06:00

إذا كنت لا تحتاج tzinfo, ، ستحصل فقط على مجموعة فرعية من الزمنية التي لا طائل منه إلى حد ما.

تعديل: فقط لتجنب الارتباك، والسبب في أنني استخدمت خاصة Time#get_zone API هو أن هذا ما يتم استخدامه وراء الكواليس عند الاتصال Time#zone=. وبعد إذا كنت لا تحتاج tzinfo, ، الاتصال Time.send(:get_zone, "US/Central") عائدات nil.

نصائح أخرى

هل تحصل على ذلك من داخل المحاكاة؟ إذا كان الأمر كذلك فما الذي يعود هذا الأمر إذا قمت بتشغيله من محطة؟
SystemSetup $ -GettimeZone.

سيضع إعداد TimeZone واجهة المستخدم الرسومية في نظام التشغيل Mac OS 10.5 من الزمن بالنسبة لنا / *. إذا قمت بتعيينه يدويا من وحدة التحكم، فيمكنك ضبطه على إحدى الحالات الزمنية المتوقعة.

قم بتشغيل هذا للحصول على قائمة صالحة، ولاحظ أن الولايات المتحدة / المركزية ليست من بينها.
$ systemsetup -listimozons.

قم بتشغيل هذا لتعيينه إلى أمريكا / شيكاغو
$ systemsetup -settimezone أمريكا / شيكاغو

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top