我有一个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小时内收取了一笔巨额费用,但我已经通知我允许各种定价规则。
答案 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