我遇到过两种在 NSUserDefaults 中存储 NSDate 的方法。
// Set NSDate *myDate = [NSDate date]; [[NSUserDefaults standardUserDefaults] setObject:myDate forKey:@"myDateKey"]; // Get NSDate *myDate = (NSDate *)[[NSUserDefaults standardUserDefaults] objectForKey:@"myDateKey"];
// Set NSDate *myDate = [NSDate date]; NSTimeInterval myDateTimeInterval = [myDate timeIntervalSince1970]; [[NSUserDefaults standardUserDefaults] setFloat:myDateTimeInterval forKey:@"myDateKey"]; // Get NSTimeInterval myDateTimeInterval = [[NSUserDefaults standardUserDefaults] floatForKey:@"myDateKey"]; NSDate *myDate = [NSDate dateWithTimeIntervalSince1970:myDateTimeInterval];
选项1
这似乎是紧凑和合乎逻辑的。但是,由于Date Formatter 错误,我担心这会出错。
选项 2
这似乎很笨拙。我也不确定它的准确性——在我做的一项测试中,当我检索到日期时,它已经过了 48 秒,尽管 Apple Docs 说 NSTimeInterval 具有“亚秒级精度”。
无论我选择什么方法,它必须是:
精确到一秒钟之内。
可读且可靠。
选项 2 不准确是因为我做错了什么吗?
您会使用这两个选项中的哪一个?
还有其他我不知道的选择吗?
谢谢!
你不必要地使事情复杂化。为什么要将日期转换为时间间隔(然后将时间间隔转换为不同的原语)?就[sharedDefaults setObject:theDate forKey:@"theDateKey"]这样吧。NSDate 是 PLIST 格式(日期、数字、字符串、数据、字典和数组)支持的“主要类型”之一,因此您可以直接存储它。
[sharedDefaults setObject:theDate forKey:@"theDateKey"]
请参阅文档以获取证据。
只需直接存储和检索日期并观察它做正确的事(包括时区、精度等)。正如其他人所说,没有涉及格式化程序。