Это смешно, не правда ли?
Середина 2013 года и Apple все еще не предоставили простой способ установить значение NSDate.
Во время моего текущего проекта для iPad я не мог поверить, что мне пришлось на некоторое время остановить производительность, чтобы написать собственный класс помощника, чтобы получить значение Year из NSDate. Я имею в виду, давай, это основные вещи.
В любом случае, вот вспомогательный класс, который я использовал в своем проекте для преобразования строки в значение NSDate:
@implementation DateHelper
+(NSDate*)parseDateString:(NSString *)dateString
{
NSDateFormatter *rfc3339TimestampFormatterWithTimeZone = [[NSDateFormatter alloc] init];
[rfc3339TimestampFormatterWithTimeZone setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]];
[rfc3339TimestampFormatterWithTimeZone setDateFormat:@"MMM dd, yyyy"];
NSDate *theDate = nil;
NSError *error = nil;
if (![rfc3339TimestampFormatterWithTimeZone getObjectValue:&theDate forString:dateString range:nil error:&error]) {
NSLog(@"Date '%@' could not be parsed: %@", dateString, error);
}
return theDate;
}
@end
Используя этот код, вы можете установить значение NSDate, используя что-то вроде:
NSDate* date = [DateHelper parseDateString:@"Jul 16, 2013"];
Примечание: эта функция основана на коде, взятом отсюда:
https://stackoverflow.com/a/3968411/391605
Моим решением было использовать следующий код, но я обнаружил, что иногда , он просто не будет анализироваться и вернет nil .
// Take a date string in the format "Oct 23, 2013", and convert it into a NSDate value
// THIS DOESN'T WORK ! DON'T TRUST THIS CODE !!
NSDateFormatter* formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"MMM dd, yyyy"];
[formatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
NSDate* date = [formatter dateFromString:dateString];
Я помню, что он с треском провалился "12 октября 2012" ... вот почему я сдался и использовал более сложную функцию "parseDateString", показанную выше.
Моя точка зрения ... будьте осторожны.
Некоторые из базовых функций NSDate просто не работают должным образом ...