2

ユーザーの生年月日を取得するために Facebook SDK を使用しています。ユーザーが生年月日を公にアクセスできるように設定している限り、生年月日は問題なく表示されます。私の問題は、Facebook ユーザーの日付設定が異なることです。たとえば、ユーザーは、日付/月、月/年、または日付全体のみを表示したり、生年月日全体をオフにしたりできます。そのため、日付の形式が異なります。しかし、日付文字列を NSDate オブジェクトに変換するには、NSDateformatter を使用する必要があります。でも使うことで

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

すべての形式で、年または月がない場合、日付は null になります。

したがって、質問は、一般的な日付形式の問題で日付形式を変換する一般的な方法はありますか? それとも、文字列に月、年、または日があることを検出できますか?

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 エクスプローラー(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 表示しない:<null>

したがって、Anoop Vaidya からのアドバイスに従うのが最善でしょう。

于 2013-04-23T17:50:21.053 に答える