Я запрашивая ContactsContract.Data.CONTENT_URI со следующими аргументами, для того, чтобы получить все юбилеи контактов устройстваКак обращаться с разными форматами рождения? Skype возвращается 1 января 1970 г.
final static Uri CONTENT_URI =
ContactsContract.Data.CONTENT_URI;
String SELECTION_ARGS = new String[] {
ContactsContract.CommonDataKinds.Event.CONTENT_ITEM_TYPE,
String.valueOf(ContactsContract.CommonDataKinds.Event.TYPE_BIRTHDAY)
};
String SELECTION =
ContactsContract.Data.MIMETYPE + " = ? AND "
+ ContactsContract.CommonDataKinds.Event.TYPE + " = ? AND "
+ ContactsContract.CommonDataKinds.Event.START_DATE + " NOT NULL";
String[] PROJECTION = {
Data._ID,
Data.CONTACT_ID,
Data.LOOKUP_KEY,
Utils.hasHoneycomb() ? Data.DISPLAY_NAME_PRIMARY : Data.DISPLAY_NAME,
Utils.hasHoneycomb() ? Data.PHOTO_THUMBNAIL_URI : Data.CONTACT_ID,
ContactsContract.CommonDataKinds.Event.START_DATE,
SORT_ORDER,
};
cur = getContext().getContentResolver().query(CONTENT_URI ,
ContactsQuery.PROJECTION,
SELECTION,
SELECTION_ARGS,
SORT_ORDER);
Проблема в том, что поле START_DATE может иметь различное форматирование в некоторых случаях. Некоторые возвращаемые значения:
1990-08-11
--08-13
Jan 1, 1970
По какой-то причине все контакты выбираемые из Skype, как представляется, имеют свои дни рождения установить до 1 января 1970 года
В настоящее время я разборе даты например:
private final static SimpleDateFormat yearFull = new SimpleDateFormat("yyyy-MM-dd", Locale.US);
private final static SimpleDateFormat yearLess = new SimpleDateFormat("--MM-dd", Locale.US);
Calendar signCal = Calendar.getInstance();
Date date = null;
try {
date = yearFull.parse(birthday);
} catch (ParseException e) {
// e.printStackTrace();
Log.w(TAG, "No year in " + birthday);
// throw new IllegalArgumentException("Error parsing " + birthday);
try {
date = yearLess.parse(birthday);
} catch (ParseException e1) {
Log.e(TAG, "Couldn't parse yearLess " + birthday);
e1.printStackTrace();
}
}
signCal.setTime(date);
, но он пропускает случай 1 января 1970 года.
Сколько различных форматов есть? Какова наилучшая практика использования значения START_DATE в таблице контактов?
Возможно ли иметь кусок кода, который обрабатывает все форматов?
Итерация через список SimpleDateFormats - это хороший подход, если вы знаете, какие форматы ожидать. START_DATE - значение TEXT (String), взятое из таблицы контактов. «1 января 1970 года» сохраняется как в таблице. –
Возможно, нет возможности разобрать даты, не зная различных форматов, которые будут иметь даты заранее, насколько мне известно, нет универсального парсера формата даты. Следовательно, сначала вам нужно будет сделать свое исследование. – vdaras