gpt4 book ai didi

ios - SQLite 存储、检索和比较 DATETIME 字段

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:46:36 29 4
gpt4 key购买 nike

我真的无法尝试在 Objective C 中比较 SQLite 查询中的日期。这就是我正在做的事情:

存储日期:

This document告诉我使用下面指定的日期格式,但它似乎不正确。我尝试使用 yyyy-MM-dd hh:mm:ss 也没有成功。

NSDate *today = [NSDate date];
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"YYYY-MM-DD HH:MM:SS"];
NSString *dateString=[dateFormat stringFromDate:today];

NSString *query = [NSString stringWithFormat: @"INSERT INTO user (edited) VALUES (\"%@\")", dateString];

比较日期

我为此使用时间戳,我将其转换为日期时间字符串

long stamp = [sessie integerForKey:@"stamp"];

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"YYYY-MM-DD HH:MM:SS"];
NSString *dateString = [formatter stringFromDate:[NSDate dateWithTimeIntervalSince1970:stamp]];

sqlite3_stmt *result = [db selectQuery:[NSString stringWithFormat:@"SELECT * FROM user WHERE edited > '%@'", dateString]];

时间戳是使用 [[NSDate date] timeIntervalSince1970] 简单生成的。问题是查询不会给出正确的结果,而且我什至不知道日期是否首先正确存储。任何帮助将不胜感激!

最佳答案

一些观察:

  1. 对于您的日期字符串,您绝对不想使用 YYYY-MM-DD HH:MM:SS。这不会生成有效的日期字符串。使用 yyyy-MM-dd hh:mm:ss 更接近,但也不完全正确(因为您将使用 12 小时 hh)。请改用 yyyy-MM-dd HH:mm:ss

  2. 但是,这种日期格式不捕获时区,因此,如果您将日期字符串存储在 SQLite 数据库中,则应使用 SQLite Date And Time Functions 中讨论的 UTC (GMT)文档。

    NSDateFormatter * formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
    formatter.timeZone = [NSTimeZone timeZoneWithName:@"UTC"];
    formatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"];
    NSString *dateString = [formatter stringFromDate:today];

    如上所示,您可能还想指定 locale,这样日期的格式就不会根据设备的本地化设置而改变。

  3. 请注意,您可能会考虑使用 timeIntervalSince1970 将日期存储为数据库中的 REAL 值(而不是 TEXT).这可以更有效一些,并自动解决 UTC 问题。

关于ios - SQLite 存储、检索和比较 DATETIME 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22115571/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com