日期计算函数:已知当前日期,求过了一段时间后的日期。
2017-05-22 14:25
267 查看
函数的功能是,根据当前日期,计算过了一段时间后的日期。
1. 流程图:
2.函数实现:
/** * Method called to check if the date is valid. * short duration: unit is day. * short[] curData: current date, format is YYMMDD * byte [] expData: store the expected date, format is YYMMDD * Return value: false if fail, else succeed. */ private static boolean vGetExpectDate(short[] curDate, short duration, short [] expDate) { short year; short month; short day; short days_left; short day_add = 0; // Assign the real date to year, month, day and hour year = curDate[0]; month = curDate[1]; day = curDate[2]; day_add = duration; // days add to year while(day_add > (days_left = sDaysToNextYear(year, month, day))) { // come to the 1st day in 1st month of the next year. year++; month = 1; day = 1; day_add -= days_left; } // days add to month while(day_add > (days_left = sDaysToNextMonth(year, month, day))) { month++; day = 1; day_add -= days_left; } // days add to day day += day_add; // store the expected date into the workbuf. expDate[0] = year; expDate[1] = month; expDate[2] = day; return true; } private static short sDaysToNextYear(byte year, byte month, byte day) { byte days_Feb; byte days_month; short ret; switch(month) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: days_month = 31; break; case 4: case 6: case 9: case 11: days_month = 30; break; case 2: // Here assumes the year is 20xx, so if the year is leap or not depends on the last byte xx. if(0 == (year % 4)) days_month = 29; else days_month = 28; break; default: break; } ret = days_month - day + 1; month++; switch(month) { case 2: ret += days_Feb; case 3: ret += 31; case 4: ret += 30; case 5: ret += 31; case 6: ret += 30; case 7: ret += 31; case 8: ret += 31; case 9: ret += 30; case 10: ret += 31; case 11: ret += 30; case 12: ret += 31; default: break; } return ret; } private static short sDaysToNextMonth(byte year, byte month, byte day) { byte days_month; switch(month) { case 1: days_month = 31; break; case 2: // Here assumes the year is 20xx, so if the year is leap or not depends on the last byte xx. if(0 == (year % 4)) days_month = 29; else days_month = 28; break; case 3: days_month = 31; break; case 4: days_month = 30; break; case 5: days_month = 31; break; case 6: days_month = 30; break; case 7: days_month = 31; break; case 8: days_month = 31; break; case 9: days_month = 30; break; case 10: days_month = 31; break; case 11: days_month = 30; break; case 12: days_month = 31; break; default: break; } return (days_month - day + 1); }
相关文章推荐
- 计算当前日期是任意时间段内第几周的函数
- 计算当前日期是任意时间段内第几周的函数
- 计算当前日期是任意时间段内第几周的函数
- 计算当前日期是当年第几周的函数
- Oracle一些日期计算的函数
- 由.Net类库提供的农历计算(C#农历)-获取当前日期的农历日期
- 关于日期天数计算的几个函数!
- 日期计算,可以跨天的函数
- 计算当前周是一年中的第几周的函数
- JAVA小函数-计算日期差
- [日期时间]函数(-),计算两个时间之间的秒数
- 关于日期天数计算的几个函数!
- 一个日期的扩展函数库包括计算周次和本周时间范围(javascript)
- 计算当前日期的会计期间
- C#时间函数扩展(计算第几周和周起止日期)
- 日期计算小函数
- 几个方便的日期计算函数
- 关于日期天数计算的几个函数!
- 获得当前日期和计算其它一些日期(妙用DateDiff和DateAdd)
- delphi中计算指定日期是该月第几周的函数