前天需求要自己做一个时间选择器 ,选择范围是今天到一年后今天;然后本以为android会有直接获取固定时间段内的集合方法,结果死活找不到,好吧,自己下了个方法。。。挺low的 不过实现功能了。
public void getYearDate(){ long upDay = dataOne("2018-04-01 00:00:00"); long downDay = dataOne("2018-04-02 00:00:00"); long cut = downDay - upDay; Log.e("",""); } public long dataOne(String time) { SimpleDateFormat sdr = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA); Date date; long times = 0; try { date = sdr.parse(time); long l = date.getTime(); times = l; } catch (Exception e) { e.printStackTrace(); } return times; } /** * 初始化 * @param context */ private void init(Context context){ getYearDate(); long dayMins = 86400000; //一整天的毫秒值 int year = calendar.get(Calendar.YEAR); int month = calendar.get(Calendar.MONTH) + 1; int day = calendar.get(Calendar.DAY_OF_MONTH); dateList = new ArrayList<DateObject>(); List strDateList = new ArrayList<String>(); for (int i = 0; i < 365; i++) { Date d = new Date(); long currentDay = d.getTime(); long next = currentDay+(dayMins*i); SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()); String y_m_d = format.format(next); strDateList.add(y_m_d); }
strDateList里面就是一年内的日期集合了。
dataOne()这个方法就是把时间字符串转换成时间戳的。。。
还发现一个问题 使用Calendar的时候 如果不clear()下,会出现你意料不到的恶心情况。。。
Calendar ca = Calendar.getInstance(); ca.clear(); int maxDayOfMonth = ca.getActualMaximum(Calendar.DAY_OF_MONTH);