也许有人可以帮助解释为什么我在将字符串转换为日期时会得到一个空值。 一切看起来都很好,但我显然在这里错过了一些东西。
一些背景:
这个iPad应用程序将在不同的国家/地区使用,我需要对日期进行计算,以查看自用户上次登录以来是否已经过去了90天。
我有一个SQLite数据库,其中DateLastIn字段设置为TEXT
。我的对象将 DateLastIn 属性设置为 NSDate
在填充我的记录对象时,我设置了一个 NSDateFormatter。
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyy-MM-dd hh:mm:ss"]; // SQLite default date format
然后我阅读了DateLastIn(使用SQLite的FMDB包装器)。
// test SQLite as String
NSString *testDate = [results stringForColumn:@"DateLastIn"];
NSLog(@"DateLastIn straight from DB (string) shows %@", testDate);
结果:日期最后直接从数据库 (字符串) 显示 2012-04-23 18:20:51
到目前为止,一切都很好。 接下来,我测试将其转换为 NSDate 对象,例如
NSDate *aDate = [[NSDate alloc] init];
aDate = [formatter dateFromString:testDate];
NSLog(@"Using formmater on string date results in: %@", aDate);
结果:在字符串日期上使用格式器会导致:(空)
我已经在SQLite中尝试了DATETIME,我尝试在我的对象中使用NSString而不是NSDate,并且似乎在兜圈子。
任何帮助非常感谢。
NSDateFormatter
使用Unicode技术标准#35中的格式模式。
对于小时格式,您需要HH
(小时 [0-23])而不是hh
(小时 [1-12])。
我将您的日期格式更改为 HH 而不是 hh,它可以工作。这是我的测试代码....
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; // SQLite default date format
// test SQLite as String
NSString *testDate = @"2012-04-23 18:20:51";
NSDate *aDate = [formatter dateFromString:testDate];
NSLog(@"Using formmater on string date results in: %@", aDate);