سؤال

عندي موعد، 2010-08-23 13:30:00 -0400 وأحاول الحصول عليها في المنطقة الزمنية للتوقيت العالمي +2. الفرق في الثواني هو 21600 ولكن عندما أتصل [[NSDate alloc] initWithTimeInterval:interval sinceDate:sourceDate];, ، انا حصلت 2010-08-24 01:30:00 +0200 التي يجب أن تكون 2010-08-23 19:30:00 +0200. أي فكرة عما أفعله خطأ؟

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

المحلول

يمثل كائن التاريخ لحظة محددة في الوقت المناسب ، بغض النظر عن ما قد تقوله ساعات الأشخاص المختلفين في ذلك الوقت.

تتورط المناطق الزمنية عندما ترغب في عرض التاريخ ، حيث ستعرض عادة ما كانت ساعة المستخدم قد تقولها (أو تقول ، أو ستقول) في ذلك الوقت. هذا هو بالضبط ما يحدث عندما تكون NSLog NSDATE: وصف التاريخ هو تلك اللحظة الزمنية الممثلة في منطقتك الزمنية المحلية.

إن إضافة أو طرح من NSDATE ليس تحويل المنطقة الزمنية. الإضافة والطرح تنتج NSDates تمثل آخر لحظات من زمن؛ في حالتك ، تقوم بإنشاء nsdate للحظة بعد 6 ساعات من اللحظة التي بدأت فيها ، ليس نفس اللحظة على الجانب الآخر من الكوكب.

للتبسيط ، ينظر تحويل المنطقة الزمنية نفس الوقت في نقاط مختلفة في الفضاء (أقسام مختلفة من سطح الكوكب) ، في حين أن إضافة التاريخ والطرح حساب أوقات مختلفة.

لا يوجد تحويل منطقة زمنية لـ NSDate ، لأنه ليس في منطقة زمنية لتبدأ. تتورط المنطقة الزمنية فقط عند تنسيق تاريخ تلك المنطقة الزمنية. لذلك ، لعرض هذا التاريخ في منطقة زمنية أخرى ، ما عليك سوى القيام بذلك. عادة ، هذا يعني توفير المنطقة الزمنية المطلوبة لك تاريخ تنسيق.

نصائح أخرى

أرى أن التاريخ الذي تعود إليه لديه منطقة زمنية مختلفة +200 ليس -400. إذا لاحظت أنك سترى أن هذه النتيجة هي بالضبط 12 ساعة (أو 6 ساعات + 6 ساعات) بعد تاريخك الأصلي. هل قمت بالصدفة بتغيير اللغة أيضًا عندما قمت بالتاريخ الجديد؟ عندما قمت بالتغيير الذي بدأ يمنحك +200 بدلاً من -400 قام النظام تلقائيًا بتعديل الوقت للتعويض ، ثم أضفت 6 ساعات أخرى إلى التاريخ. يخزن NSDATE جميع التواريخ كفاصل زمني منذ 1 يناير 2001 بتوقيت جرينتش ويتم ضبطها في المناطق الزمنية حسب الحاجة.

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