2

我正在使用 Facebook SDK 获取用户出生日期。只要用户设置了可公开访问的出生日期,出生日期就会很好。我的问题是 Facebook 用户的日期设置不同。例如,用户可以只显示日期/月、月/年或整个日期,或者关闭整个出生日期。所以日期格式是不同的。但是要将日期字符串转换为 NSDate 对象,我必须使用 NSDateformatter。但是通过使用

[df setDateFormat:@"yyyy/mm/dd"];

对于每种格式,如果没有年份或月份,则日期为空。

所以问题是有没有一种通用的方法可以用通用的 dateformmatter 转换任何日期格式?或者我们可以检测到一个字符串有几个月、几年或一天吗?

4

3 回答 3

2

您可以检查字符串是否添加了年份。

然后使用[df setDateFormat:@"MM/dd"];[df setDateFormat:@"yyyy/MM/dd"];相应地或任何其他格式日期即将到来。

于 2013-04-23T17:10:14.427 回答
1

我检查了这个。

在我的 Facebook 个人资料上,我将生日外观设置为“仅限日期和月份”

在我的应用程序中,我使用以下权限登录:

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"]);
             }
         }];
    }
}

即使我设置了“仅限日期和月份”,fetchUserData 中的结果也是:

FB:    birthday: 08/16/1978

编辑:

这仅适用于登录用户。对于他的朋友,您将只能获得他们允许在时间线上发布的数据(即使使用 FQL)。

您可以在Graph API Explorer (FQL Query)中尝试 FQL 查询返回的内容

确保首先获得用户friends_birthday权限的访问令牌(通过获取访问令牌按钮)

运行查询:

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 的建议。

于 2013-04-23T17:50:21.053 回答
0

根据新的 Graph API:

根据新的 Graph API 人的生日。这是一个固定格式的字符串,如 MM/DD/YYYY。但是,人们可以控制谁可以看到他们出生的年份与月份和日期分开,所以这个字符串只能是年份 (YYYY) 或月份 + 日期 (MM/DD)

于 2016-04-03T15:32:34.277 回答