我正在使用Facebook SDK来获取用户的出生日期。只要用户将出生日期设为可公开访问,出生日期就会很好。我的问题是Facebook用户的日期设置不同。例如,用户只能显示日期/月份,月/年或整个日期或关闭整个出生日期。所以日期格式不同。但要将日期字符串转换为NSDate对象,我必须使用NSDateformatter。但是通过使用
[df setDateFormat:@"yyyy/mm/dd"];
对于每种格式,如果没有年份或没有月份,则日期为空。
所以问题是,是否存在使用通用dateformmatter转换任何日期格式的通用方法?或者我们可以检测到一个字符串有几个月或几年或一天?
答案 0 :(得分:2)
您可以检查字符串是否添加了年份。
然后相应地使用[df setDateFormat:@"MM/dd"];
或[df setDateFormat:@"yyyy/MM/dd"];
或日期即将来临的任何其他格式。
答案 1 :(得分:1)
我查了一下。
在我的Facebook个人资料中,我将生日外观设置为"仅限日期和月份#34;
在我的应用程序中,我使用以下权限登录:
NSArray *permissions = [[NSArray alloc] initWithObjects:@"user_birthday",
@"email",
@"user_about_me",
@"user_hometown",
nil];
FBSession *session = [[FBSession alloc] initWithAppID:nil
permissions:permissions
urlSchemeSuffix:nil
tokenCacheStrategy:_tokenCaching];
当然,您只需要@"user_birthday"
权限。
然后我有fetchUserData
方法:
- (void)fetchUserData
{
if (FBSession.activeSession.isOpen)
{
[[FBRequest requestForMe] startWithCompletionHandler:
^(FBRequestConnection *connection,
NSDictionary<FBGraphUser> *user,
NSError *error)
{
if (!error)
{
NSLog (@"FB: id: %@", user.id);
NSLog (@"FB: username: %@", user.username);
NSLog (@"FB: link: %@", user.link);
NSLog (@"FB: name: %@", user.name);
NSLog (@"FB: first_name: %@", user.first_name);
NSLog (@"FB: last_name: %@", user.last_name);
NSLog (@"FB: middle_name: %@", user.middle_name);
NSLog (@"FB: birthday: %@", user.birthday);
NSLog (@"FB: email: %@",[user objectForKey:@"email"]);
NSLog (@"FB: gender: %@",[user objectForKey:@"gender"]);
}
}];
}
}
即使我只设置了#34;只有#34; fetchUserData的结果是:
FB: birthday: 08/16/1978
修改强>
这仅适用于登录用户。对于他的朋友,你只能获得他们允许在时间轴上发布的数据(即使使用FQL)。
您可以在Graph API Explorer(FQL查询)
中尝试FQL查询返回的内容确保首先获得用户friends_birthday权限的访问令牌(通过Get Access令牌按钮)
运行查询:
SELECT uid, name, birthday_date from user where uid IN (SELECT uid2 FROM friend WHERE uid1=your_facebook_id_here)
如果您检查结果,那么可能的格式为:
完整的生日:MM/DD/YYYY
月和日:MM/DD
不要显示:<null>
所以,按照Anoop Vaidya的建议你最好。
答案 2 :(得分:0)
根据新的Graph API:
根据新的Graph API这个人的生日。这是一个固定格式的字符串,如MM / DD / YYYY。但是,人们可以控制谁可以从月份和日期分别看出他们出生的那一年,所以这个字符串只能是年(YYYY)或月+天(MM / DD)