计算C99中两个日期字符串之间的工作日数

时间:2015-09-25 10:39:37

标签: c date c99

我有 yyyy-mm-dd 形式的两个日期字符串,就像

const char* date_start = "2015-09-30";
const char* date_end   = "2015-10-03";

如何计算两个日期之间的工作日数(周六和周日的天数)?可以存在开始和结束日相等的日期(日计数应该等于1(工作日)或0(周末)然后)。所有输入日期都保证有效(例如2月30日)。

该解决方案需要在OS X和Windows上使用C99,并且与系统区域设置无关。

我更愿意使用尽可能少的外部代码(即库或框架)。

2 个答案:

答案 0 :(得分:1)

伪代码

形成时间结构

struct tm start = {0};
start.tm_year = 2105-1900;
start.tm_mon = 9-1;
start.tm_mday = 30;
start.tm_isdst = 0;
struct tm end = ...

表格时间编号并设定tm_wday字段

time_t tstart = mktime(&start);
time_t tend = mktime(&end);

找出日差

double day_diff = difftime(&tend, &tstart)/(24.0*60*60);

每个工作日有一些魔法(左边是OP)

numweekdays = ((long)day_diff/7)*5 + foo(start->tm_wday, end->tm_wday);

答案 1 :(得分:1)

  1. 将日期字符串转换为更易于处理的内容,例如“自1970年1月1日以来的长日期”,如果适合您的用例;或“struct tm”
  2. 计算天数差异(结束减去开始加一)
  3. 对于差异中的每个完整周(> 7)添加5个工作日/ 2个周末
  4. 计算其余(至少6天)的工作日状态并按照
  5. 添加