当您在 NSDate 上调用描述时,我将我的 NSDates 存储到一个国际格式的文件中。
但是,我不知道如何从字符串格式返回到 NSDate 对象。NSDateFormatter 似乎仅限于几种格式,不包括国际格式。
我应该如何从字符串格式返回?
当您在 NSDate 上调用描述时,我将我的 NSDates 存储到一个国际格式的文件中。
但是,我不知道如何从字符串格式返回到 NSDate 对象。NSDateFormatter 似乎仅限于几种格式,不包括国际格式。
我应该如何从字符串格式返回?
Jeff 是对的,可能是序列化对象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]];
为什么不保存对象本身,而不是将描述保存到文件中?NSDate
符合NSCoding
协议;保存对象意味着您不必担心翻译它。有关详细信息,请参阅NSCoding 协议参考。
NSDateFormatter
我会尝试通过以下方法设置一个成功解析字符串:
- (NSDate *)dateFromString:(NSString *)string
请注意,您可能需要一段时间才能NSDateFormatter
正确设置以成功解析您的字符串。
如果您要像这样存储面向程序的数据,我还建议将其存储为更易于访问的格式,例如CFAbsoluteTime
. 一旦你在你的程序中拥有它,你就可以将它格式化为国际格式或其他人类可读的格式。
将其转换为 NSDate 接受的格式,然后执行转换。
或者,根据您所指的 NSDate (!) initWithString 应该涵盖国际标准日期。