получение NSDate от NSCalendar и NSDateComponents - PullRequest
0 голосов
/ 01 февраля 2012

Мой код похож на ниже

NSDateComponents *components = [[NSDateComponents alloc] init];
components.year = [aDay.year intValue];   // 2012
components.month = [aDay.month intValue]; // 2
components.day = [aDay.day intValue];  // 1
components.hour = components.minute = components.second = 0;
NSDate *now = [self.calender dateFromComponents:components];

и относительно self.calendar, я попробовал оба метода:

self.calendar = [NSCalendar currentCalendar];
self.calender = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];

, но после этого, когда я печатаю дату "сейчас", это всегда так:

(gdb) po now
2012-01-31 16:00:00 +0000

Дата" сейчас "должна быть 2012-02-01 00: 00: 00

Видимо, разница в 8 часов, и яЯ сейчас нахожусь в Китае, поэтому я нахожусь в часовом поясе +0800?

Как я могу решить эту проблему?Должен ли я иметь дело с timeZone?

Большое спасибо!

Ответы [ 2 ]

1 голос
/ 01 февраля 2012

Ну, почему бы вам не попробовать установить часовой пояс по своему вкусу:

NSTimeZone *zone = [NSTimeZone timeZoneWithName:@"PST"];
[calendar setTimeZone:zone];

Вы можете увидеть список известных часовых поясов с помощью:

NSArray *timezones = [NSTimeZone knownTimeZoneNames];
NSLog(@"%@", timezones);
0 голосов
/ 03 февраля 2012

Я понял это.

То, что он отображает правильно, так как NSDate сохраняет абсолютное время, поэтому часовой пояс всегда + 0000,

и лучше сохранить его так, поскольку мне нужно сравнить: метод в NSDate и т. Д.

Единственное отличие состоит в том, что когда вы собираетесь переводить абсолютную дату в строку для локальной даты, читаемую для пользователей, просто позаботьтесь об этом.

...