之前在项目中碰到一个功能:根据年/月/日三种不同的风格来显示照片.
怎么获取照片以及获得照片时间就先不写了,本文重点是记录怎么拿时间进行分类处理.
之前想尽各种办法,通过字符串拼接比对啊(实在太low了,效率也渣)、
通过date.getTime()用long来算啊.是可以,第一个是算法很繁琐,第二是关于毫秒的计算也是比较恶心人.
最后选择了使用calendar,整个人都起飞了.直接上代码吧.
/***
* @param entityList 照片的实体数组
*/
private static List<Calendar> getAccurateTimeData(List<PhotoEntity> entityList, int type) {
List<Calendar> calendars = new ArrayList<>();
for (int i = 0; i < entityList.size(); i++) {
if (i == 0) {
calendars.add(entityList.get(i).calendar);
continue;
}
switch (type) {
case DAY_TYPE:
if (entityList.get(i).calendar.get(Calendar.YEAR) != entityList.get(i - 1).calendar.get(Calendar.YEAR)
|| entityList.get(i).calendar.get(Calendar.DAY_OF_YEAR) != entityList.get(i - 1).calendar.get(Calendar.DAY_OF_YEAR)) {
calendars.add(entityList.get(i).calendar);
}
break;
case MONTH_TYPE:
if (entityList.get(i).calendar.get(Calendar.YEAR) != entityList.get(i - 1).calendar.get(Calendar.YEAR)
|| entityList.get(i).calendar.get(Calendar.DAY_OF_YEAR) != entityList.get(i - 1).calendar.get(Calendar.MONTH)) {
calendars.add(entityList.get(i).calendar);
}
calendars.add(entityList.get(i).calendar);
break;
case YEAR_TYPE:
if (entityList.get(i).calendar.get(Calendar.YEAR) != entityList.get(i - 1).calendar.get(Calendar.YEAR)) {
calendars.add(entityList.get(i).calendar);
}
calendars.add(entityList.get(i).calendar);
break;
}
}
return calendars;
}
以上代码可以看到.calendar能够直接通过以及set好的Time数据来提取年月日的信息.
只需要在传数据到entity里的时候传一个calendar并且将其setTime就好.之后对于照片的时间控制就都可以通过从entity里面拿calendar了.