Преобразовать описание NSDate в NSDate? - PullRequest
6 голосов
/ 29 августа 2009

Я храню свои NSDates в файле в международном формате, который вы получаете, когда вызываете описание для NSDate.

Однако я не знаю, как вернуться из строкового формата к объекту NSDate. NSDateFormatter, по-видимому, ограничен парой форматов, не включая международный.

Как мне вернуться к строковому формату?

Ответы [ 4 ]

25 голосов
/ 29 августа 2009

Джефф прав, NSCoding, вероятно, предпочтительный способ сериализации NSDate объектов. В любом случае, если вы действительно хотите / хотите сохранить дату в виде простой строки даты, это может помочь вам:

На самом деле, NSDateFormatter вообще не ограничен предопределенными форматами. Вы можете установить произвольный пользовательский формат через свойство dateFormat. Следующий код должен уметь анализировать строки даты в «международном формате», т.е. Формат NSDate -description использует:

NSDateFormatter* dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
dateFormatter.dateFormat = @"yyyy-MM-dd HH:mm:ss ZZZ";
NSDate* date = [dateFormatter dateFromString:@"2001-03-24 10:45:32 +0600"];

Для получения полной информации о синтаксисе строки формата см. стандарт Unicode .

Однако будьте осторожны с -description - выходные данные этих методов обычно предназначены для читателей-людей (например, сообщений журнала), и не гарантируется, что они не изменят свой формат вывода в новой версии SDK! Для сериализации объекта даты лучше использовать тот же форматер даты:

NSDateFormatter* dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
dateFormatter.dateFormat = @"yyyy-MM-dd HH:mm:ss ZZZ";
NSString* dateString = [dateFormatter stringFromDate:[NSDate date]];
4 голосов
/ 29 августа 2009

Вместо сохранения описания в файл, почему бы не сохранить сам объект? NSDate соответствует протоколу NSCoding; сохранение объекта означает, что вам не нужно беспокоиться о его переводе. См. справочник по протоколу NSCoding для получения дополнительной информации.

0 голосов
/ 29 августа 2009

Преобразуйте его в формат, который принимает NSDate, и затем выполните преобразование обратно.

В качестве альтернативы, в зависимости от того, какую NSDate вы ссылаетесь (!), InitWithString должен охватывать даты международного стандарта.

0 голосов
/ 29 августа 2009

Я бы попытался настроить NSDateFormatter для успешного разбора строки следующим способом:

- (NSDate *)dateFromString:(NSString *)string

Обратите внимание, что вам может понадобиться некоторое время, чтобы правильно настроить NSDateFormatter для успешного анализа вашей строки.

Если вы собираетесь хранить данные, относящиеся к программе, как это, я бы также рекомендовал хранить их в более удобном для доступа формате, например CFAbsoluteTime. Если у вас есть это в вашей программе, вы можете отформатировать его в международный формат или что-то еще удобочитаемое.

...