1
我查詢ContactsContract.Data.CONTENT_URI以以下的參數,以獲得所有設備聯絡人的生日如何處理不同的生日格式? Skype的返回1970年1月1日
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月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);
但它錯過了1970年1月1日的情況。
有多少種不同的格式?使用聯繫人表的START_DATE值的最佳做法是什麼?
是否有可能有一段代碼處理全部格式?
如果您確實知道需要什麼樣的格式,那麼通過SimpleDateFormats列表進行迭代確實是一個好方法。 START_DATE是從聯繫人表中獲取的TEXT(字符串)值。 「1970年1月1日」在表格中保存。 –
可能沒有一種方法來解析日期而不知道日期事先會有的各種格式,據我所知,沒有通用的日期格式分析器。因此你必須先做你的研究。 – vdaras