Joh*_*her 172 cocoa datetime nsdate nsuserdefaults nstimeinterval
我在NSUserDefaults中存储了两种存储NSDate的方法.
// Set
NSDate *myDate = [NSDate date];
[[NSUserDefaults standardUserDefaults] setObject:myDate forKey:@"myDateKey"];
// Get
NSDate *myDate = (NSDate *)[[NSUserDefaults standardUserDefaults] objectForKey:@"myDateKey"];
Run Code Online (Sandbox Code Playgroud)
// 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];
Run Code Online (Sandbox Code Playgroud)
选项1
这似乎是紧凑和合乎逻辑的.但是,由于Date Formatter错误,我担心这会出错.
选项2
这似乎很笨拙.我也不确定它的准确性 - 在我做过的一次测试中,当我检索到日期时它已经超过了48秒,尽管Apple Docs说NSTimeInterval具有"亚秒精度".
无论我选择何种方法,都必须:
精确到一秒钟之内.
可读且可靠.
选项2是不准确的,因为我做错了什么?
你会使用这两个选项中的哪一个?
还有其他选择我不知道吗?
谢谢!
Jos*_*zzi 379
你不必要地使事情复杂化.为什么要将日期转换为时间间隔(然后将时间间隔转换为不同的原语)?只是[sharedDefaults setObject:theDate forKey:@"theDateKey"]完成它.NSDate是PLIST格式支持的"主要类型"之一(日期,数字,字符串,数据,字典和数组),因此您可以直接存储它.
请参阅文档以获取证明.
只需直接存储和检索日期并观察它做正确的事(包括时区,精度等).正如其他人所说,没有涉及格式化程序.
Joh*_*eek 14
对于选项#1,我不相信涉及日期格式化程序.可能在引擎盖下,但我想它并没有坏掉.日期以ISO 8601格式存储.
对于选项#2,使用-setDouble:forKey:而-doubleForKey不是float基于版本.这可能是导致精度错误的原因.
使用NSUserDefaults; 日期存储在祖鲁时间,所以没有时区问题需要担心.将它存储在你的时区,在另一个时区拉出来,你会没事的,系统会处理转换(没有担心日期格式化程序).
| 归档时间: |
|
| 查看次数: |
47137 次 |
| 最近记录: |