如何将两个DateTime之间的天数分成几天的跨度?

时间:2013-04-23 17:11:56

标签: c# .net datetime

我有一个CSV文件,我导入VehicleMovement表。每条记录都是车辆出口或停车场的入口,在着火后跳过篮球,我将这些记录合并到VehiclePresence表中,几乎每条记录都有StartDateTime和{{ 1}}。现在我必须计算车辆存在长度的停车费。当存在超过一天时,这是一个问题。停车价格基于一天中的时间,星期几等。所以我需要将该存在分成单日存在并计算每日费用。

E.g。我的截止时间为06h00,EndDateTime == 2013-04-22 20:37:28 VehiclePresence == < strong> 2013-04-25 22:55:20 。我想想出以下StartDateTime

EndDateTime

这将为我留下一条原始VehiclePresenses记录,其中包含修改的开始和结束时间,以及我将插入的两条新记录。这没有问题。

我该怎么做?我本人只是在24小时内收取了一笔巨额费用,但我已经通知我允许各种定价规则。

1 个答案:

答案 0 :(得分:1)

计算开始时间后的第一个休息时间,然后逐日循环,直至到达结束时间。

示例:

DateTime StartDateTime = new DateTime(2013, 04, 22, 20, 37, 28);
DateTime EndDateTime = new DateTime(2013, 04, 25, 22, 55, 20);

DateTime startTime = StartDateTime;

// calculate first break time
DateTime breakTime = StartDateTime.Date.AddHours(6);
if (breakTime < StartDateTime) {
  breakTime = breakTime.AddDays(1);
}

while (breakTime < EndDateTime) {

  Console.WriteLine("{0} - {1}", startTime, breakTime);

  // move to next day
  startTime = breakTime;
  breakTime = breakTime.AddDays(1);

}
Console.WriteLine("{0} - {1}", startTime, EndDateTime);

输出:

2013-04-22 20:37:28 - 2013-04-23 06:00:00
2013-04-23 06:00:00 - 2013-04-24 06:00:00
2013-04-24 06:00:00 - 2013-04-25 06:00:00
2013-04-25 06:00:00 - 2013-04-25 22:55:20