从保存在sqlite数据库表中的日期检索月份部分,以显示月份数据

时间:2012-01-04 10:58:55

标签: iphone date sqlite

希望每个人都做得很好:)

我已经从保存在sqlite数据库中的日期检索了月份。首先,我要感谢一些指导我在sqlite数据库表中正确插入日期的专家,即格式如下:

[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];

我已在控制器页面中显示包括日期在内的所有数据,并说明"查看提醒"页。

现在我有一个视图控制器供用户按月查看,比如用户选择月份" 1月"从选择器视图,它将导航到视图控制器,在那里我显示与所选月份相对应的提醒。

我之前已经知道如何访问从选择器视图中选择的字符串值,以便我们可以使用查询:

"SELECT * FROM reminders WHERE Grp = '%@'",appDelegate.groupString

在app delegate文件中声明groupString的地方,在视图控制器中为其指定一个值,其中存在选择器视图并使用显示视图中的上述查询访问该字符串

这是我发现here的解决方案。现在我正在尝试检索日期,即。只需将查询写为:

"SELECT * FROM reminders WHERE Date = '%@'",appDelegate.monthString

它不起作用,因为日期保存在@&#34; yyyy-MM-dd HH:mm:ss&#34;。所以我通过各种链接对此进行了研究,我尝试了以下方法:< / p>

"SELECT * FROM reminders WHERE MONTH like 'January %'"等。

但正如我所提到的,所选字符串必须引用该值,因此使用:

MONTH like '%@',appDelegate.monthString

"SELECT * FROM reminders WHERE strftime('%m', Date) = '%@'",appDelegate.monthString

通过 sqlite日期数据类型和This Link

他们都没有工作

众所周知,我们有一个直接查询来检索特定月份的所有提醒:

"SELECT * FROM reminders WHERE Date BETWEEN '2012-01-01' AND '2012-01-31'"

它运作完美,但我需要参考 1月,2月,3月(从选择器视图中选择)等作为参考字符串到目前为止,我不知道如何获得月份从date.Is有任何查询从日期说2012-01-01作为1月或在该特定上下文中的其他一些检索月份....

请帮助我,提前致谢:)

编辑:

我已将显示格式更改为月份,然后是日期,即:

ReminderClass *remin = [[ReminderClass alloc]init];
remin.Date = [[[NSString alloc]initWithUTF8String:(const char *)sqlite3_column_text(statament, 3)]autorelease];

                NSDateFormatter *dateFormat = [[[NSDateFormatter alloc]init]autorelease];
                [dateFormat setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
                NSDate *date = [dateFormat dateFromString:remin.Date];
                [dateFormat setDateFormat:@"MMMM dd"];
                NSString *dateVal = [dateFormat stringFromDate:date];
                remin.Date = dateVal;

但在我们这样做之前,我们需要编写用于检索数据的sql查询,即:

sqlQuery = [NSString stringWithFormat:@"select * from reminders WHERE ????",appDelegate.monthString];

问号是我需要的,再次感谢:)

2 个答案:

答案 0 :(得分:2)

您可以使用dateFormat从日期检索月份:

NSDate * today = [NSDate date];

NSDateFormatter *monthFormat = [[NSDateFormatter alloc] init];
[monthFormat setDateFormat:@"MM"];

答案 1 :(得分:1)

首先,我们需要手动形成日期。为此,我们需要以下列方式创建由所需组件组成的NSDateComponents:

NSDateComponents *components = [[NSCalendar currentCalendar] components:NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit fromDate:[NSDate date]];

- &GT;使用组件获取当前年份或当前年份:

NSInteger year = [components year];

- &GT;手动形成3个字符串年,月,日来获取日期:

NSString *fromString = [NSString stringWithFormat:@"%d",year];
NSString *string2 = [NSString stringWithFormat:@"-%@",appDelegate.monthValue];
NSString *string3 = @"-01";

appDelegate.monthValue只是在appDelegate中指定的字符串,并且在pickerView中选择了包含01,02,03 ..... 12个月值的值

我们知道01只不过是任何一个月的日(最小范围),我们可以简单地对其进行硬编码:)

现在我们准备好形成From Date,我们走了:

string2 = [string2 stringByAppendingString:string3];
fromString = [fromString stringByAppendingString:string2];
NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init]autorelease];
[dateFormatter setDateFormat:@"yyyy-MM-dd"];

NSString *dateString=[NSString stringWithString:fromString];

NSDate *fromDate = [dateFormatter dateFromString:dateString];

NSString* finalFromDateString = [dateFormatter stringFromDate:fromDate];

请注意我为形成日期所做的额外更改,使用2个字符串,因为我们在将字符串分配给NSDate时会遇到问题,(不正确的日期检索,即比实际日期少一天)。有关详情,请按此link。现在我们从约会结束了。

- &GT;使用月份作为参考获取日期

要获得一个月内的日期或最大范围,我们需要使用NSRange方法,该方法将计算该特定年份中一个月或一个月的天数范围,此处为:

NSString *toString = [NSString stringWithFormat:@"%d",year];

NSString *monthValue = [NSString stringWithFormat:@"-%@",appDelegate.monthValue];

NSRange monthRange = [gregorian rangeOfUnit:NSDayCalendarUnit inUnit:NSMonthCalendarUnit forDate:fromDate];

NSString *rangeString = [NSString stringWithFormat:@"-%d",monthRange.length];

monthValue = [monthValue stringByAppendingString:rangeString];

toString = [toString stringByAppendingString:monthValue];

NSDate *toDate = [dateFormatter dateFromString:toString];

NSString *finalToDateString = [dateFormatter stringFromDate:toDate];

我们完成了从日期和现在到现在使用以下语句形成查询:

NSString *sqlQuery = [NSString stringWithFormat:@"select * from reminders WHERE Date BETWEEN '%@' AND '%@'",finalFromDateString,finalToDateString];

多数民众赞成,现在我们必须能够检索与选择器视图中选择的特定月份或月份相对应的所有数据

谢谢大家,祝你玩得愉快:)