如何将android联系人的出生日期字符串转换为日期格式?

如何将android联系人的出生日期字符串转换为日期格式?,android,Android,在我的Android项目中,我想将联系人的出生日期转换为用户语言环境中的日期字符串 String whereBday = ContactsContract.Data.MIMETYPE + "= ? AND " + ContactsContract.CommonDataKinds.Event.TYPE + "=" + ContactsContract.CommonDataKinds.Event.TYPE_BIRTHDAY; Stri

在我的Android项目中,我想将联系人的出生日期转换为用户语言环境中的日期字符串

  String whereBday = ContactsContract.Data.MIMETYPE + "= ? AND " +
            ContactsContract.CommonDataKinds.Event.TYPE + "=" + 
            ContactsContract.CommonDataKinds.Event.TYPE_BIRTHDAY;

     String[] paramsBday = new String[]{ 
            ContactsContract.CommonDataKinds.Event.CONTENT_ITEM_TYPE   };

    Cursor bDayCursor = contentResolver.query(ContactsContract.Data.CONTENT_URI,
                    null,  whereBday, paramsBday, null); 

    while (bDayCursor.moveToNext()) { 

//date of birth as String format
        String bDay = bDayCursor.getString(bDayCursor.getColumnIndex(ContactsContract.CommonDataKinds.Event.START_DATE));
       //converting string to date format
       SimpleDateFormat formatter = new SimpleDateFormat(bDay);
        Date myDate= formatter.parse(mytime);
        DateFormat f = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT, Locale.getDefault());
        String formattedDate = f.format(new Date());
        System.out.println("Date: " + formattedDate);

    }

     bDayCursor.close();

不幸的是,对于日期格式的存储方式似乎没有固定的标准。最好的解决方案是循环查看日期格式列表,看看它是否匹配以下任何一种格式。一旦你得到
日期
对象,你就可以用你自己的格式化程序修改它以任何格式打印。此外,如果未找到它,则可以检查不支持的格式,并将其添加到数组中

您可以使用以下代码:

public static final SimpleDateFormat[] birthdayFormats = {
        new SimpleDateFormat("yyyy-MM-dd"),
        new SimpleDateFormat("yyyy.MM.dd"),
        new SimpleDateFormat("yy-MM-dd"),
        new SimpleDateFormat("yy.MM.dd"),
        new SimpleDateFormat("yy/MM/dd"),
        new SimpleDateFormat("MMM dd, yyyy")
};

private void printBirthdays() {
    Cursor cursor = getContactsBirthdays();
    int bDayColumn = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Event.START_DATE);
    while (cursor.moveToNext()) {
        String bDay = cursor.getString(bDayColumn);
        Date birthday = null;
        boolean found = false;
        for (SimpleDateFormat f : birthdayFormats) {
            try {
                birthday = f.parse(bDay);
                Log.e(TAG, bDay + " = " + birthday.toString());
                found = true;
                break;
            } catch (ParseException e) {
            }
        }
        if (!found) {
            Log.e(TAG, bDay);
        }
    }
}

private Cursor getContactsBirthdays() {
    Uri uri = ContactsContract.Data.CONTENT_URI;

    String[] projection = new String[]{
            ContactsContract.Contacts.DISPLAY_NAME,
            ContactsContract.CommonDataKinds.Event.CONTACT_ID,
            ContactsContract.CommonDataKinds.Event.START_DATE
    };

    String where =
            ContactsContract.Data.MIMETYPE + "= ? AND " +
                    ContactsContract.CommonDataKinds.Event.TYPE + "=" +
                    ContactsContract.CommonDataKinds.Event.TYPE_BIRTHDAY;
    String[] selectionArgs = new String[]{
            ContactsContract.CommonDataKinds.Event.CONTENT_ITEM_TYPE
    };
    String sortOrder = null;
    return managedQuery(uri, projection, where, selectionArgs, sortOrder);
}

不幸的是,对于日期格式的存储方式似乎没有固定的标准。最好的解决方案是循环查看日期格式列表,看看它是否匹配以下任何一种格式。一旦你得到
日期
对象,你就可以用你自己的格式化程序修改它以任何格式打印。此外,如果未找到它,则可以检查不支持的格式,并将其添加到数组中

您可以使用以下代码:

public static final SimpleDateFormat[] birthdayFormats = {
        new SimpleDateFormat("yyyy-MM-dd"),
        new SimpleDateFormat("yyyy.MM.dd"),
        new SimpleDateFormat("yy-MM-dd"),
        new SimpleDateFormat("yy.MM.dd"),
        new SimpleDateFormat("yy/MM/dd"),
        new SimpleDateFormat("MMM dd, yyyy")
};

private void printBirthdays() {
    Cursor cursor = getContactsBirthdays();
    int bDayColumn = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Event.START_DATE);
    while (cursor.moveToNext()) {
        String bDay = cursor.getString(bDayColumn);
        Date birthday = null;
        boolean found = false;
        for (SimpleDateFormat f : birthdayFormats) {
            try {
                birthday = f.parse(bDay);
                Log.e(TAG, bDay + " = " + birthday.toString());
                found = true;
                break;
            } catch (ParseException e) {
            }
        }
        if (!found) {
            Log.e(TAG, bDay);
        }
    }
}

private Cursor getContactsBirthdays() {
    Uri uri = ContactsContract.Data.CONTENT_URI;

    String[] projection = new String[]{
            ContactsContract.Contacts.DISPLAY_NAME,
            ContactsContract.CommonDataKinds.Event.CONTACT_ID,
            ContactsContract.CommonDataKinds.Event.START_DATE
    };

    String where =
            ContactsContract.Data.MIMETYPE + "= ? AND " +
                    ContactsContract.CommonDataKinds.Event.TYPE + "=" +
                    ContactsContract.CommonDataKinds.Event.TYPE_BIRTHDAY;
    String[] selectionArgs = new String[]{
            ContactsContract.CommonDataKinds.Event.CONTENT_ITEM_TYPE
    };
    String sortOrder = null;
    return managedQuery(uri, projection, where, selectionArgs, sortOrder);
}

将android联系人出生日期字符串转换为日期格式将android联系人出生日期字符串转换为日期格式