【问题标题】:Format User Birth Dates to NSDate Object in iOS在 iOS 中将用户出生日期格式化为 NSDate 对象
【发布时间】:2013-04-23 17:05:31
【问题描述】:

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

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

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

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

【问题讨论】:

标签: ios nsdate


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    我检查了这个。

    在我的 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 查询)中尝试 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 不显示:&lt;null&gt;

    所以你最好听从 Anoop Vaidya 的建议。

    【讨论】:

    • 是的,你是对的。但我在 facebook 上获取我朋友的出生日期。他们是否只打开月份和日期,然后日期会像这样 08/27。我不是在获取我的出生日期,而是在获取我朋友的出生日期。如果我在问题中没有提到这一点,请道歉。
    • 我明白了。这是真的,并且由于隐私政策,如果不允许,则不可能让朋友过生日。
    • 非常感谢您的帮助。 anoop 的答案是我所看到的对我来说是最好的选择。
    【解决方案3】:

    根据新的 Graph API:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-15
      • 1970-01-01
      • 1970-01-01
      • 2014-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-27
      相关资源
      最近更新 更多