次のようにフォーマットされた値を含む DATETIME 列を持つ sqlite3 データベースがあります:
2013-01-09 04:00:00
時刻が AM か PM かを判断する方法を見つけようとしています。
以下は、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 かを判断できないことを除けば、非常にうまく機能します。次のようにフォーマッタ文字列の最後に を
追加することを提案する投稿を見ました:
... 午前/午後を把握する - しかし、それはクラッシュを引き起こしました。(もちろん、DATETIME列の実際の値にも次のように追加しました
が、それでもクラッシュしました。
何か間違ったことをしている
のか、それとも単に実行できないのかわかりませ
ん。DB 自体のエントリはすべて 24 時間形式 (つまり、4:00PM は 16:00 として入力する必要があります) であり、ステートメントを使用して値 > 12 から 12 を減算し、時間の午前または午後を判断しますか?
これには自動化された機能があると思っていたでしょう...何かアイデアはありますか?a
"yyyy-MM-dd hh:mm:ss a"
AM
PM
2013-01-09 04:00:00 AM
IF
=================================
編集/更新:
文字列を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: