Текущий месяц Дни рождения друзей Facebook в Android

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

 public static void requestFriends(FacebookRequest facebookRequest) {
    Log.d(LOG_TAG, "requestFriends(" + ")");
    String query = "select name, birthday, uid, pic_square from user where uid in (select uid2 from friend where uid1=me()) order by birthday_date";
    Bundle params = new Bundle();
    params.putString("method", "fql.query");
    params.putString("query", query);
    FacebookUtility.asyncRunner.request(null, params, new FacebookRequestListener(FacebookRequestListener.FRIENDS, facebookRequest));
}

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

 Calendar c = Calendar.getInstance(); 
    int month = c.get(Calendar.MONTH)+ 1;

    String query = "select name, birthday, uid, pic_square from user where uid in " +
    "(select uid2 from friend where uid1=me())AND birthday_date >= '" + month + "/01' AND birthday_date <= '" + month + "/31' ORDER BY birthday_date ASC";

но я не получаю никаких записей, где я пропал?


person Liza    schedule 17.01.2013    source источник
comment
Вы хотите, чтобы предстоящие дни рождения были только до конца месяца или все дни рождения в текущем месяце?   -  person Somnath Muluk    schedule 17.01.2013
comment
@SomnathMuluk Спасибо за ответ, мне нужно показать все дни рождения, которые приходятся на текущий месяц (запрос будет автоматически отображаться для всех предстоящих дней рождения в следующем месяце и так далее ...)   -  person Liza    schedule 17.01.2013


Ответы (2)


Что вы можете сделать, так это рассчитать следующие значения, используя язык, который вы используете, и использовать их в своем FQL:

1st's day of the current month (17),
Today's month of the year (01)
End date day of the current month (31)

Убедитесь, что дни и месяцы отформатированы с использованием дд и мм соответственно (дополнены нулем в случае одиночных цифр). Тогда ваш FQL будет выглядеть так:

SELECT name, birthday_date
  FROM user 
  WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = me())
  AND strlen(birthday_date) != 0
  AND (
       substr(birthday_date, 0, 2) = '01'
       AND substr(birthday_date, 3, 5) >= '01'
       AND substr(birthday_date, 3, 5) < '31'
  ) 
  ORDER BY birthday_date

Затем будут возвращены друзья, чей день рождения приходится на период с 01 января по 31 января.

Обновление: вычисление текущего месяца и последней даты текущего месяца:

Calendar cal=Calendar.getInstance();
int currentmonth=cal.get(Calendar.MONTH)+1

public static Date getLastDateOfMonth(int year, int month) {
   Calendar calendar = new GregorianCalendar(year, month, Calendar.DAY_OF_MONTH);
   calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
   return calendar.getTime();
}
person Somnath Muluk    schedule 17.01.2013
comment
да, я согласен с вами, чтобы получать дни рождения только в январе месяце, я могу использовать этот запрос Строка пересмотренного запроса = ВЫБЕРИТЕ uid, имя, pic_square, Birthday_date ОТ пользователя, ГДЕ uid В (ВЫБЕРИТЕ uid2 ОТ друга, ГДЕ uid1 = я ()) И Birthday_date ›= '01/01' AND Birthday_date ‹= '01/31' ЗАКАЗАТЬ ПО Birthday_date ASC, но я хочу сделать его более динамичным... - person Liza; 17.01.2013
comment
@Liza: Что ты имеешь в виду под более динамичным? Я не говорю о том, чтобы поставить статические значения «01» и «31». Рассчитайте дату начала и окончания, месяц по языку программирования (android) и поместите туда эти переменные. Что еще? - person Somnath Muluk; 17.01.2013
comment
то, что вы написали, я уже знал, и вы говорите о языке Android, пожалуйста, покажите мне этот код, написав на любом языке, который вы используете, тогда я буду использовать это в своей программе Android... - person Liza; 17.01.2013
comment
@Liza: Значит, вы хотите узнать текущий месяц и последнюю дату месяца с помощью языка программирования (динамически)? - person Somnath Muluk; 17.01.2013
comment
Вы попросили меня в комментарии к другому вопросу взглянуть на этот вопрос, но я не думаю, что могу многое добавить к ответу и комментариям Сомнатха Мулука. Просто используйте его пример запроса и динамически создайте строку запроса с вводом времени в качестве переменных. Если вы не знаете, как динамически создавать строки в Java, вам нужно сначала прочитать об этом. Доступно множество веб-тутов. - person onosendai; 17.01.2013
comment
@GunnarKarlsson то же самое для меня. - person domsom; 17.01.2013

Используйте этот запрос, чтобы получить друга Facebook за текущий месяц в порядке возрастания.

SELECT name, birthday, uid, pic_square FROM user WHERE uid in (SELECT uid2 FROM friend WHERE uid1=me())AND birthday_date >= '01/01/2013' AND birthday_date <= '31/01/2013' ORDER BY birthday_date

person SilentKiller    schedule 22.01.2013