في Cocoa، كيف يمكنني استخدام NSTimeZone للحصول على إزاحة المنطقة الزمنية للنظام كسلسلة؟

StackOverflow https://stackoverflow.com/questions/1052373

سؤال

بالنسبة لتوقيت المحيط الهادئ، أريد "-0700".

أحصل على موعد في الماضي لتحديد المدة التي مضت منذ حدث شيء ما.

NSDate *then = [NSDate dateWithString:@"1976-04-01 12:34:56 -0700"]; // Note the hard-coded time zone at the end

سأقوم بإنشاء سلسلة التاريخ في مكان آخر ولكني لا أعرف كيفية الوصول إلى المنطقة الزمنية المحلية.

لقد قرأت موضوعات برمجة التواريخ والأوقات الخاصة بشركة Apple الخاصة بالكاكاو بالإضافة إلى مراجع فئة NSTimeZone وNSDate ولكن من الصعب جدًا بالنسبة لي تجميع المعلومات معًا.يمكنني حقًا استخدام بضعة أسطر من التعليمات البرمجية فقط لإظهار كيفية استخدامها.

تحديث:أثناء معاناتي مع هذا، كنت أكتب التعليمات البرمجية باستخدام قالب سطر الأوامر حتى أتمكن من تجربة الأشياء بسرعة.لقد قمت للتو بتجربة الكود السابق الخاص بي على iPhone وحصلت عليه قد لا يستجيب NSDate لـ '+dateWithString:' آسف إذا زاد ذلك من الارتباك، فمن كان يعلم أن شركة Apple ستغير مثل هذه الفئة الأساسية.

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

المحلول

تعتمد إزاحة المنطقة الزمنية على التاريخ في معظم أنحاء العالم — تلك الأجزاء منه التي تستخدم التوقيت الصيفي/التوقيت الصيفي.

الطريقة الصحيحة الوحيدة هي إنشاء السلسلة بأكملها من التاريخ والمنطقة الزمنية معًا.استخدم NSDateFormatter لهذا الغرض.

نصائح أخرى

يستخدم NSDateFormatter لبناء NSDate من سلسلة:

NSDateFormatter *inputFormatter = [[NSDateFormatter alloc] init];
[inputFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss Z"];

NSDate *formatterDate;
formatterDate = [inputFormatter dateFromString:@"1976-04-01 12:34:56 -0700"];

NSString *dateString = [inputFormatter stringFromDate:formatterDate];

NSLog(@"date:%@", dateString);

بهذه الطريقة تحصل على التوقيت المحلي من السلسلة، على سبيل المثال التاريخ المحدد بواسطة السلسلة:

"1976-04-01 12:34:56 -0700"

موجود في المنطقة الزمنية -0700, ، (أنا في المنطقة الزمنية GMT +1000) لذلك أحصل على:

2009-11-17 22:13:46.480 cmdline[10593:903] تاريخ:1976-04-02 05:34:56 +1000

أفضل طريقة هي على الأرجح استخدام منسق تقويم بسيط

NSCalendarDate * date = [NSCalendarDate calendarDate];
[date setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"PDT"]];
NSLog([date descriptionWithCalendarFormat:@"%z"]);

والتي سوف إخراج "-0700"

أو اترك السطر الثاني إذا كنت تريد المنطقة الزمنية الحالية للنظام (لست متأكدًا مما كنت تطلبه)

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