我有一个带有 DATETIME 列的 sqlite3 数据库,其中包含格式如下的值:
2013-01-09 04:00:00
我试图弄清楚如何确定时间是上午还是下午?
以下是我使用 Objective-C 从我的 Sqlite3 DB 读取和转换 DATETIME 对象的方法:
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"yyyy-MM-dd hh:mm:ss"];
char *DateTimeColumn = (char *)sqlite3_column_text(statement, 13);
NSDate *myDate =[dateFormat dateFromString:[NSString stringWithUTF8String:DateTimeColumn]];
这非常有效,只是它无法确定这是凌晨 4:00 还是下午 4:00。
我看到一篇帖子建议a
在格式化程序字符串的末尾添加一个,如下所示:
"yyyy-MM-dd hh:mm:ss a"
... 找出 AM/PM - 但这会导致崩溃。(我当然也像这样在我的 DATETIME 列中添加了AM
和PM
实际值:
2013-01-09 04:00:00 AM
但它仍然崩溃。
不确定我是否做错了什么 - 或者这是否无法完成。
是唯一的解决方案数据库本身的条目都采用 24 小时格式(意思是:下午 4:00 应输入为 16:00) - 然后使用IF
语句从 > 12 的值中减去 12 以确定时间的上午或下午?
我原以为会有一些自动化功能……有什么想法吗?
==================================
编辑/更新:
将字符串转换为 NSDate 后,我突然得到一个“(null)”。这是代码的当前版本:
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"yyyy-MM-dd hh:mm:ss"];
char *DateTimeColumn = (char *)sqlite3_column_text(statement, 13);
NSString *DateTimeString = [NSString stringWithUTF8String:DateTimeColumn];
NSLog(@"DateTimeString = %@", DateTimeString);
// This NSLog gives me a good string: "DateTimeString = 2013-01-09 16:00:00"
// But when I create an NSDate object from this string:
NSDate *myDate =[dateFormat dateFromString:DateTimeString];
// ... and log it out:
NSLog(@"the REAL DATETIME object = %@", [myDate description]);
// the console shows: "the REAL DATETIME object = (null)"
// and when I add this NSDate object to my Array of NSDates, I crash:
[tempNSDateObjectsArray addObject:myDate];
Console shows:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException',
reason: '*** -[__NSArrayM insertObject:atIndex:]: object cannot be nil'
*** First throw call stack: