查询特定时间范围内事件的FQL事件表

时间:2012-08-13 13:42:19

标签: android sql sqlite facebook-fql

我使用FQL来从android上的Facebook获取事件信息。

我需要参加今天前一周和今天一周后的活动。

我已经尝试了下一个代码,但似乎DATEADD是FQL上不存在的函数:

final Bundle params = new Bundle();
params.putString("method", "fql.query");
params.putString("query",
    "SELECT eid, update_time, start_time, end_time, creator, description, name, location " + 
    "FROM event " + 
    "WHERE eid IN (SELECT eid FROM event_member WHERE uid = me() AND rsvp_status != 'declined') " + 
    "AND start_time<DATEADD(day,7,now()) AND start_time>DATEADD(day,-7,now())");
final String response = "{\"data\":" + _facebook.request(params) + "}";
final JSONObject json = Util.parseJson(response);
final JSONArray data = json.getJSONArray("data");

我可以使用什么代替DATEADD

我发现的另一个问题是他们在facebook API上说start_time字段是一个字符串,这本身就很奇怪......

2 个答案:

答案 0 :(得分:1)

好的,我找到了解决方案:

final Bundle params = new Bundle();
final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DAY_OF_MONTH, 7);
calendar = Calendar.getInstance();
final String startTime = sdf.format(calendar.getTime());
calendar.add(Calendar.DAY_OF_MONTH, -7);
final String endTime = sdf.format(calendar.getTime());
params.putString("method", "fql.query");
params.putString("query",
    "SELECT eid, update_time, start_time, end_time, creator, description, name, location " + 
    "FROM event " + 
    "WHERE eid IN (SELECT eid FROM event_member WHERE uid = me() AND rsvp_status != 'declined') " );
        + "AND start_time<'" + startTime + "' AND start_time>'" + endTime + "'");

答案 1 :(得分:0)

  

但似乎DATEADD是FQL上不存在的函数

不,它没有。因此,请在您的应用中自行计算相应的日期值,并将其放入查询中。

  

我发现的另一个问题是他们在facebook API上说start_time字段是一个字符串,这本身就很奇怪......

那有什么“怪异”的? ISO-8601日期不能表示为数值,并且为此使用特殊的“日期”数据类型在使用FQL时不会带来任何好处。