Извлечение части месяца из даты, сохраненной в таблице базы данных sqlite для отображения данных за месяц - PullRequest
1 голос
/ 04 января 2012

надеюсь, что у каждого дела идут хорошо:)

Я позаботился о получении месяца с даты, сохраненной в базе данных sqlite. Прежде всего, я хотел бы поблагодарить некоторых экспертов, которые руководили мнойдля правильной вставки даты в таблицу базы данных sqlite, т.е. в следующем формате:

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

Я отобразил все данные, включая дату, на странице контроллера, например, на странице «Просмотр напоминания».

Теперь у меня есть контроллер представления, чтобы пользователь мог просматривать месяц, скажем, если пользователь выберет месяц «Январь» в представлении выбора, он перейдет к контроллеру просмотра, где я отображаю напоминания, соответствующие выбранному месяцу.

Ранее я был поражен тем, как получить доступ к строковому значению, выбранному в представлении средства выбора, чтобы мы могли использовать запрос:

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

Где groupString объявлен в файле делегата приложения, ему присвоено значение в контроллере представления, гдеПредставление выбора присутствует и получило доступ к этой строке, используя вышеуказанный запрос в представлении дисплея

, которое было решением Iвыяснил здесь . Теперь я пытаюсь сделать то же самое для извлечения дат, то есть просто написать запрос следующим образом:

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

Не работает, потому что дата сохраняется в @ "гггг-мм-дд чч: мм: сс ". Так что я провел исследование по различным ссылкам, я экспериментировал следующими способами:

"SELECT * FROM reminders WHERE MONTH like 'January %'" и т. д.

, но какЯ упомянул, что выбранная строка должна быть привязана к значению, поэтому используется:

MONTH like '%@',appDelegate.monthString

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

Пропущено до Дата sqlite типы данных и Эта ссылка

Ни один из них не работал

Как мы все знаем, у нас есть прямой запрос для получения всех напоминаний за определенный месяц:

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

Работает отлично, но мне нужно сослаться на Январь, Февраль, Март (выбран из вида выбора) и т. Д. В качестве справочной строки на сегодняшний день, я не знаю, как получитьчасть месяца от даты. Есть ли запрос для получения части месяца с даты, скажем 2012-01-01 как январь или какой-то другойдругие в этом конкретном контексте ....

Пожалуйста, помогите мне, спасибо всем заранее:)

РЕДАКТИРОВАТЬ:

Я изменил формат отображения в месяц только послепо дате, т.е.:

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 ]

2 голосов
/ 04 января 2012

Вы можете использовать dateFormat для получения месяца от даты:

NSDate * today = [NSDate date];

NSDateFormatter *monthFormat = [[NSDateFormatter alloc] init];
[monthFormat setDateFormat:@"MM"];
1 голос
/ 06 января 2012

Прежде всего нам нужно сформировать дату вручную. Для этого нам нужно создать NSDateComponents, состоящий из необходимых компонентов, следующим образом:

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

-> Получить текущий или текущий год, используя компоненты, т.е.:

NSInteger year = [components year];

-> Сформировать 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 - это не что иное, как день (минимальный диапазон) в любом месяце, мы можем просто жестко его кодировать:)

Теперь мы готовы сформировать дату от начала и до конца:

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 (неправильный поиск даты, т.е. на один день меньше, чем фактическая дата). Для получения более подробной информации перейдите по этой ссылке . Теперь мы закончили с даты.

-> Получить текущую дату, используя месяц в качестве ссылки

Чтобы получить текущий или максимальный диапазон в месяце, нам нужно использовать метод 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];

Мы закончили с датой From и To Date теперь формируем запрос, используя следующую инструкцию:

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

Вот и все, теперь мы должны иметь возможность получить все данные, соответствующие конкретному месяцу или месяцу, выбранному в представлении выбора

Спасибо всем, приятно провести время :) 1031 *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...