在开发中经常遇到日期的选择,同时需要有效的显示开始日期跟结束日期,同时在起始日期之间有一个固定的间隔天数,如订酒店或者机票界面中的起始时间的显示,要求结束时间在开始时间后3天,如:开始时间为2014-06-30,结束时间则为2014-07-02.
在android中有一个很简单的方法可以实现:
final Calendar c = Calendar.getInstance();
mCurrentDay = c.get(Calendar.DAY_OF_MONTH) ;
c.set(Calendar.DAY_OF_MONTH,mDay+3);
mDay = c.get(Calendar.DAY_OF_MONTH);
以上则可以实现间隔日期的计算了,对于间隔时间也是可以这样实现,相当简单,对于润年也没有问题。
参考资料:
http://hi.baidu.com/laoyang1018/item/8b12bdd070b7de95260ae7b5
public long getLongTime(char dateType) {
Calendar c = Calendar.getInstance(); // 当时的日期和时间
int hour; // 需要更改的小时
int day; // 需要更改的天数
switch (dateType) {
case '0': // 1小时前
hour = c.get(Calendar.HOUR_OF_DAY) - 1;
c.set(Calendar.HOUR_OF_DAY, hour);
// System.out.println(df.format(c.getTime()));
break;
case '1': // 2小时前
hour = c.get(Calendar.HOUR_OF_DAY) - 2;
c.set(Calendar.HOUR_OF_DAY, hour);
// System.out.println(df.format(c.getTime()));
break;
case '2': // 3小时前
hour = c.get(Calendar.HOUR_OF_DAY) - 3;
c.set(Calendar.HOUR_OF_DAY, hour);
// System.out.println(df.format(c.getTime()));
break;
case '3': // 6小时前
hour = c.get(Calendar.HOUR_OF_DAY) - 6;
c.set(Calendar.HOUR_OF_DAY, hour);
// System.out.println(df.format(c.getTime()));
break;
case '4': // 12小时前
hour = c.get(Calendar.HOUR_OF_DAY) - 12;
c.set(Calendar.HOUR_OF_DAY, hour);
// System.out.println(df.format(c.getTime()));
break;
case '5': // 一天前
day = c.get(Calendar.DAY_OF_MONTH) - 1;
c.set(Calendar.DAY_OF_MONTH, day);
// System.out.println(df.format(c.getTime()));
break;
case '6': // 一星期前
day = c.get(Calendar.DAY_OF_MONTH) - 7;
c.set(Calendar.DAY_OF_MONTH, day);
// System.out.println(df.format(c.getTime()));
break;
case '7': // 一个月前
day = c.get(Calendar.DAY_OF_MONTH) - 30;
c.set(Calendar.DAY_OF_MONTH, day);
// System.out.println(df.format(c.getTime()));
break;
}
return c.getTimeInMillis();
}
/**
* 获取阶段日期
* @param dateType
* @author Yangtse
*/
//使用方法 char datetype = '7';
public static StringBuilder getPeriodDate(char dateType) {
Calendar c = Calendar.getInstance(); // 当时的日期和时间
int hour; // 需要更改的小时
int day; // 需要更改的天数
switch (dateType) {
case '0': // 1小时前
hour = c.get(Calendar.HOUR_OF_DAY) - 1;
c.set(Calendar.HOUR_OF_DAY, hour);
// System.out.println(df.format(c.getTime()));
break;
case '1': // 2小时前
hour = c.get(Calendar.HOUR_OF_DAY) - 2;
c.set(Calendar.HOUR_OF_DAY, hour);
// System.out.println(df.format(c.getTime()));
break;
case '2': // 3小时前
hour = c.get(Calendar.HOUR_OF_DAY) - 3;
c.set(Calendar.HOUR_OF_DAY, hour);
// System.out.println(df.format(c.getTime()));
break;
case '3': // 6小时前
hour = c.get(Calendar.HOUR_OF_DAY) - 6;
c.set(Calendar.HOUR_OF_DAY, hour);
// System.out.println(df.format(c.getTime()));
break;
case '4': // 12小时前
hour = c.get(Calendar.HOUR_OF_DAY) - 12;
c.set(Calendar.HOUR_OF_DAY, hour);
// System.out.println(df.format(c.getTime()));
break;
case '5': // 一天前
day = c.get(Calendar.DAY_OF_MONTH) - 1;
c.set(Calendar.DAY_OF_MONTH, day);
// System.out.println(df.format(c.getTime()));
break;
case '6': // 一星期前
day = c.get(Calendar.DAY_OF_MONTH) - 7;
c.set(Calendar.DAY_OF_MONTH, day);
// System.out.println(df.format(c.getTime()));
break;
case '7': // 一个月前
day = c.get(Calendar.DAY_OF_MONTH) - 30;
c.set(Calendar.DAY_OF_MONTH, day);
// System.out.println(df.format(c.getTime()));
break;
}
int mYear = c.get(Calendar.YEAR);
int mMonth = c.get(Calendar.MONTH);
int mDay = c.get(Calendar.DAY_OF_MONTH);
StringBuilder strForwardDate = new StringBuilder().append(mYear).append(
(mMonth + 1) < 10 ? "0" + (mMonth + 1) : (mMonth + 1)).append(
(mDay < 10) ? "0" + mDay : mDay);
System.out.println("strDate------->"+strForwardDate+"-"+c.getTimeInMillis());
return strForwardDate;
//return c.getTimeInMillis();
}