如何计算两个时间的时间差?请各位大虾指导

xiangl1213 2011-11-24 03:10:17
目前做一个统计项目,需要实现两个时间的时间差的计算,需要排除周末和节假日,比如:

Time1 = "2011-9-28 16:18:09";
Time2 = "2011-10-19 09:18:09";

如何判断中间过了一个十一假,又过了一个周末?还请各位大虾指导!

之前费尽九牛二虎之力,在各位的指导下将周末排除对了,但是节假日的排除目前实在没什么办法,只好再次向各位大虾求教了!
...全文
162 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
cgl_lgs 2011-11-25
  • 打赏
  • 举报
回复
放到数组里然后循环判断啊。。。
cankoo 2011-11-25
  • 打赏
  • 举报
回复
查表法。做个万年历。
xiangl1213 2011-11-25
  • 打赏
  • 举报
回复
应该好了!我用if语句将11年所有的节假日都穷举,放在一个函数中,再在主函数中进行调用!
如果哪位大虾还有更好的办法,请帮忙回复哦!
不胜感激!
lhy 2011-11-25
  • 打赏
  • 举报
回复
错了,这是BCB区

if((Begintime < StrToDateTime("2011-1-1 0:00"))&&(Endtime > StrToDateTime("2011-1-3 23:59")))
lhy 2011-11-25
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 xiangl1213 的回复:]
有哪位大虾能指点一下,以下这段到底错在哪了?怎么修改啊?
//节假日库中的一个,如果开始时间在1月1日之前,结束时间在1月3日之后,表明开始和结束时间之间过了元旦,节假日时间为3天
TDateTime Begintime,Endtime;
if((Begintime < StrToDateTime(2011-1-1 0:00))&&(Endtime > StrToDateTi……
[/Quote]

if((Begintime < StrToDateTime('2011-1-1 0:00'))&&(Endtime > StrToDateTime('2011-1-3 23:59')))
cgl_lgs 2011-11-25
  • 打赏
  • 举报
回复
你的Holidays在if里定义的,外面用不了啊。。。
xiangl1213 2011-11-25
  • 打赏
  • 举报
回复
有哪位大虾能指点一下,以下这段到底错在哪了?怎么修改啊?
//节假日库中的一个,如果开始时间在1月1日之前,结束时间在1月3日之后,表明开始和结束时间之间过了元旦,节假日时间为3天
TDateTime Begintime,Endtime;
if((Begintime < StrToDateTime(2011-1-1 0:00))&&(Endtime > StrToDateTime(2011-1-3 23:59)))
{
int Holidays = 3;
}
oldtab 2011-11-24
  • 打赏
  • 举报
回复
struct SHoliday
{
int Month, Day;
};
SHoliday holiday[假日天数];
初始化 holiday;

在你判断周末的循环中,加入
for(int i= 0; i< 假日天数; i++)
if(日期.月== holiday.Month && 日期.天== holiday.Day)
这一天就是假日。
cgl_lgs 2011-11-24
  • 打赏
  • 举报
回复
1、把两个日期先相减喽,得出一个时间差:T1;
2、计算出两个日期中间所经过的周末天数,得出一个周末时间数:T2;
3、把法定假日做成一个map,存放起始放假日及放假天数(不包括周末):HDAYMap;
4、统计两个日期之间在HDAYMap中的总日子:T3;
T1-T2-T3就是工作日了。

上面算法有个BUG:如果起始日或是终止日在假期内则可能计算错误,楼主可以自己再考虑并调整一下:)
xiangl1213 2011-11-24
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 oldtab 的回复:]
做一个假日数组。比较判断。
[/Quote]
具体怎么实现?有示例代码吗?
xiangl1213 2011-11-24
  • 打赏
  • 举报
回复
非常感谢!
我需要将节假日的天数排除掉,每个节假日的天数不一样,我用以下办法,但是有问题:
if((Begintime < StrToDateTime(2011-1-1 0:00))&&(Endtime > StrToDateTime(2011-1-3 23:59)))
{
int Holidays = 3;
}
还请指导哦!
oldtab 2011-11-24
  • 打赏
  • 举报
回复
做一个假日数组。比较判断。
缘中人 2011-11-24
  • 打赏
  • 举报
回复

比较每一天,
bool exist=false;
TDateTime dt;
String dt1="2011-10-01";
for(int i=0;i<x;i++)
{
dt=...;//每一天
if( FormatDateTime("yyyy-mm-dd",dt) == dt1 )
{
exist=true;//有假日
}
}

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧