2

也许有人可以帮助解释为什么我在将字符串转换为日期时得到一个空值。一切看起来都不错,但我显然在这里遗漏了一些东西。

一些背景:

这个 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(使用 FMDB 包装器用于 SQLite)。

        // test SQLite as String
        NSString *testDate = [results stringForColumn:@"DateLastIn"];
        NSLog(@"DateLastIn straight from DB (string) shows %@", testDate);

结果: 直接来自 DB(字符串)的 DateLastIn 显示 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 并且似乎在绕圈子。

非常感谢任何帮助。

4

2 回答 2

4

NSDateFormatter使用来自 Unicode Technical Standard #35 的格式模式

对于小时格式,您需要HH(Hour [0-23]) 而不是hh(Hour [1-12])。

于 2012-05-31T08:37:51.200 回答
2

我将您的日期格式更改为 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);
于 2012-05-31T08:41:30.617 回答