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

时间:2013-04-23 17:05:32

标签: ios nsdate

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

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

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

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

3 个答案:

答案 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)