在 iOS 中将用户出生日期格式化为 NSDate 对象

Posted

技术标签:

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

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

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

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

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

【问题讨论】:

根据developers.facebook.com/docs/reference/api/user生日应该是MM/DD/YYYY格式。 这有帮助吗? ***.com/a/10540877/653513 【参考方案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)

【讨论】:

以上是关于在 iOS 中将用户出生日期格式化为 NSDate 对象的主要内容,如果未能解决你的问题,请参考以下文章

如何在IOS中将日期格式化为字符串,如“一天前”、“分钟前”?

如何通过 NSDate 输入对表格视图进行排序(格式化为 MMM yyyy)

在 Spark Dataframe API 中将出生日期转换为年龄

在 Redshift 中将日期时间列格式化为 ISO 日期时间

如何在R中将多个日期格式格式化为一个?

在 MySQL 查询中将字符串格式化为日期