将日期保存到SQLite

Cha*_*ndu 1 sqlite iphone xcode ios

-(void)save:(id)sender
{
sqlite3_stmt *statement;
const char *dbpath = [databasePath UTF8String];

if (sqlite3_open(dbpath, &expenseDB) == SQLITE_OK)
{

    NSString *insertSQL = [NSString stringWithFormat:@"INSERT INTO ADDEXPENSE(date, description, category, amount) VALUES (\"%@\", \"%@\", \"%@\",\"%@\")", fieldOne.text, fieldTwo.text,fieldThree.text , fieldFour.text];

    const char *insert_stmt = [insertSQL UTF8String];

    sqlite3_prepare_v2(expenseDB, insert_stmt, -1, &statement, NULL);
    if (sqlite3_step(statement) == SQLITE_DONE)
    {
      status.text = @"saved"
    } 
    else 
    {
       status.text = @"Failed"
    }
    sqlite3_finalize(statement);
    sqlite3_close(expenseDB);
}
}
Run Code Online (Sandbox Code Playgroud)

这个方法对我来说很好.但是如何将它保存为日期而不是字符串?我尝试了几种方法,但没有为我工作.因为我是编码的新手.有人请帮我一段代码uuuuuuuuu这是我使用的日期选择器.

UIDatePicker *picker = (UIDatePicker *)sender;
NSDate *dateSelected = [picker date];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"dd.MM.yyyy"];
self.fieldOne.text = [dateFormatter stringFromDate:dateSelected];
Run Code Online (Sandbox Code Playgroud)

Ope*_*ide 5

SQLLite没有日期数据类型,因此您必须将其另存为文本或数字.我个人使用文本方法,我的代码将任何日期转换为插入或更新时的文本,并将其转换回选择.

所以从我使用的日期开始

[self.dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm"];
NSString *dateString = [self.dateFormatter stringFromDate:date];
Run Code Online (Sandbox Code Playgroud)

要将其转换回来

[self.dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm"];
NSDate *theDate = [self.dateFormatter dateFromString:ds];
Run Code Online (Sandbox Code Playgroud)

我将值保留为日期,直到我想要显示它为止.

您的代码示例需要一些思考,因为iOS开发中的一个关键概念是MVC,这意味着您应该尝试将View与模型分开.理想情况下,您应该有一个存储数据的对象.您的View知道如何显示数据,而Model知道如何存储和检索数据.

它值得研究,因为它使代码更易于维护和扩展.


ank*_*tlp 5

最好在DB中创建一个双数据类型的字段,并使用[NSDate timeinterversince1970]将日期保存在时间戳中; 这将使NSDate成为时间戳,您可以将其以双格式保存在数据库中,同时在NSDate类中使用类似类型的函数将时间戳转换为NSDate.