سؤال

أعلم أن هذا السؤال تم طرحه مليون مرة، ولم أجد حلاً.المشكلة هي:أقوم بتعديل NSDate لإرجاع تاريخ اليوم الأول في الشهر الحالي أو تاريخ اليوم الأول في الشهر التالي.يبدو أنه يعمل بشكل جيد باستثناء شيء واحد:يعيد الوقت ناقص 2 أو 3 ساعات.

شفرة:

NSCalendar *theCalendar = [NSCalendar currentCalendar];
int comp = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit;
NSDateComponents *theComp = [theCalendar components:comp fromDate:date];
[theComp setTimeZone:[NSTimeZone systemTimeZone]];
switch (roundingMode) {
    case FIRST_OF_MONTH:
        [theComp setDay:1];
        return [theCalendar dateFromComponents:theComp];
    case FIRST_OF_NEXT_MONTH:
        [theComp setMonth:theComp.month+1];
        [theComp setDay:1];
        return [theCalendar dateFromComponents:theComp];
}

إليك إخراج مصحح الأخطاء (gdb):

(gdb) po theComp
<NSDateComponents: 0x6e26170>
  TimeZone: Europe/Kiev (EET) offset 7200
  Calendar Year: 2012
  Month: 3
  Day: 1
(gdb) po date
2012-03-12 13:05:22 +0000
(gdb) po [theCalendar dateFromComponents:theComp]
2012-02-29 22:00:00 +0000

أي مساعدة سيكون موضع تقدير كبير.

شكرًا لك.

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

المحلول

يتم عرض التاريخ بتوقيت جرينتش: 2012-02-29 00:00:00 +0000 يكون 2012-03-01 22:00:00 +0200.ولا تنس أيضًا تغيير التوقيت الصيفي، وهو ما يفسر سبب اختلافك بمقدار 3 ساعات أحيانًا.

تاريخ النتيجة صحيح، لكن مصحح الأخطاء يعرضه بتوقيت جرينتش.

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