将NSDate的描述转换为NSDate?

时间:2009-08-28 20:46:19

标签: iphone serialization date nsdate

我将NSDates存储到您在NSDate上调用描述时获得的国际格式的文件。

但是,我不知道如何从字符串格式返回到NSDate对象。 NSDateFormatter似乎仅限于几种格式,不包括国际格式。

我应该如何从字符串格式返回?

4 个答案:

答案 0 :(得分:25)

Jeff是对的,NSCoding可能是序列化NSDate个对象的首选方式。无论如何,如果你真的想要/需要将日期保存为普通日期字符串,这可能会对你有所帮助:

实际上,NSDateFormatter并不仅限于预定义的格式。您可以通过dateFormat属性设置任意自定义格式。以下代码应该能够以“国际格式”解析日期字符串,即。格式NSDate的{​​{1}}使用:

-description

有关格式字符串语法的完整参考,请查看Unicode standard

但是,请注意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"]; - 这些方法的输出通常针对人类读者(例如日志消息),并且不保证它不会在新的SDK版本中更改其输出格式!您应该使用相同的日期格式化程序来序列化日期对象:

-description

答案 1 :(得分:4)

为什么不保存对象本身而不是将描述保存到文件中? NSDate符合NSCoding协议;保存对象意味着您不必担心翻译它。有关详细信息,请参阅NSCoding protocol reference

答案 2 :(得分:0)

我会尝试设置NSDateFormatter以通过以下方法成功解析字符串:

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

请注意,您可能需要一段时间才能正确设置NSDateFormatter以成功解析字符串。

如果您要存储这样的面向程序的数据,我还建议您以更易于访问的格式存储它,例如CFAbsoluteTime。在程序中使用后,您可以将其格式化为国际格式或其他人类可读的格式。

答案 3 :(得分:0)

将其转换为NSDate接受的格式,然后执行转换。

或者,根据您所指的NSDate(!),initWithString应涵盖国际标准日期。