NSDate无损转换为NSString,反之亦然

时间:2015-07-13 16:15:08

标签: ios objective-c nsstring

我有一个NSDate:

  

2015-07-13 16:04:01 +0000

我希望将其转换为NSString,以便能够将其存储在服务器上,然后从服务器读取并转换回NSDate,而不会丢失任何细节。

我一直在查看其他帖子,建议按以下方式进行:

NSDateFormatter *dateFormatter = [NSDateFormatter new];
[dateFormatter setDateStyle:NSDateFormatterMediumStyle];
NSString *dateString = [dateFormatter stringFromDate:date];

反之亦然:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"dd-MM-yyyy"];
NSDate *dateFromString = [dateFormatter dateFromString:message[@"date"]];

但这会导致格式的丢失和妥协:

  

2015年7月13日

如何将NSDate转换为NSString并返回,最终返回确切的原始NSDate?

2 个答案:

答案 0 :(得分:1)

您只能使用反映用户首选项的日期(非时间)样式格式化原始NSDate,并且您只需将检索到的NSDate格式化为日,月和年,即" dd-MM-yyyy"。您应该保持NSDateFormatter的一致性,以保持原始格式。

更改两者

[dateFormatter setDateFormat:@"dd-MM-yyyy"];

[dateFormatter setDateStyle:NSDateFormatterMediumStyle];

[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss Z"];

获取并保留整个日期和时间格式。

答案 1 :(得分:1)

NSDate存储自参考日期以来的秒数。如果您只使用iOS应用程序。然后你调用一个方法返回该秒数作为一个数字的NSTimeInterval,然后存储该数字。这意味着绝对不会丢失任何信息。您的数据将以超过微秒的精度返回。

如果数据必须由不运行iOS的不同设备读取,那么还有另一种方法返回自1970年1月1日以来的秒数。这是一种非常标准的格式,任何操作系统都应该能够处理。

存储数字而不是字符串似乎要好得多。