读书人

分不多了时间段算法

发布时间: 2013-11-23 10:52:51 作者: rapoo

分不多了,求一个时间段算法
是一个停车场的算法,有一种停车卡:早7:00~23:00免费,其他时间2元一小时,每超过15分钟算一小时整。总停车费为all_fee,开始时间为start_time,离开时间为end_time。求这个算法。。。
[解决办法]


没听说。我们这里白天4元/小时。夜间0.5元/小时。
一个停车场可以停几百辆车,每个车每小时即便只收0.5元,如果一直处在满载状态,一天也有几千收入,养活几个看护者绰绰有余。费用的大头还是场地本身。
[解决办法]
//时间平移7个小时,将免费时段变成是0到16时,计费时段则为16到24时
startTime = startTime-7;
endTime = endTime-7;
//停车时间超过24小时
int parkDay = (int)((endTime - startTime) / 24);//每超过24小时意味着要收费8小时
startTime = startTime > 0 && startTime < 16 ? 16 : startTime;
endTime = endTime > 0 && endTime < 16 ? 0 : endTime;
//算总价
all_fee = 2 * ((int)(endTime - startTime) + parkDay * 8) + ((endTime - startTime) % 1 > 0.25 ? 2 : 0);
[解决办法]
修改一下:
endTime = endTime > 0 && endTime < 16 ? 24 : endTime;

[解决办法]
System.Timers.Timer Timer = new System.Timers.Timer(1000);
List<StopCarInfo> CarList = new List<StopCarInfo>();

private void Form1_Load(object sender, EventArgs e)
{
this.Timer.Elapsed += new System.Timers.ElapsedEventHandler(Timer_Elapsed);
this.Timer.Start();
}

private void Timer_Elapsed(object sender, EventArgs e)
{
foreach (var car in CarList)
{

if (car.CarState == StopCarInfo.State.Out)
{
var hh = (car.PassTime - car.StopTime).Seconds;
var mm = (car.PassTime - car.StopTime).Milliseconds;
if (hh > 1)
{
car.All_Fee = hh * 2;
}
if (mm > 15)
{
car.All_Fee += 2;
}
System.Console.WriteLine(car.All_Fee);
car.CarState = StopCarInfo.State.Finish;
}

car.PassTime = car.PassTime.AddSeconds(1);
}


}

private void button1_Click(object sender, EventArgs e)
{
StopCarInfo stopCar = new StopCarInfo();
stopCar.CarState = StopCarInfo.State.In;
stopCar.CarId = "527";
stopCar.StopTime = DateTime.Now;
stopCar.PassTime = DateTime.Now;
CarList.Add(stopCar);
}

private void button2_Click(object sender, EventArgs e)
{
var taretCar = this.CarList.FirstOrDefault((item) => item.CarId == "527"&& item.CarState == StopCarInfo.State.In);
if (taretCar != null)
{
taretCar.CarState = StopCarInfo.State.Out;
}
}

public class StopCarInfo
{
public string CarId
{
get;
set;
}

public DateTime StopTime
{
get;
set;
}

public DateTime PassTime
{
get;
set;
}

public int All_Fee
{
get;
set;
}

public State CarState
{
get;
set;
}

public enum State
{
In,
Out,
Finish
}
}
[解决办法]
if (DateTime.Now.Hour > 7 && DateTime.Now.Hour < 23)
stopCar.CarState = StopCarInfo.State.Free;
[解决办法]
你都没有看这两部内容呀

int parkDay = (int)((endTime - startTime) / 24);//每超过24小时意味着要收费8小时

+ parkDay * 8
[解决办法]
private void Timer_Elapsed(object sender, EventArgs e)
{
//收费时间段


if (DateTime.Now.Hour < 7 && DateTime.Now.Hour > 23)
{
foreach (var car in CarList)
{
if (car.CarState == StopCarInfo.State.Free)
{
car.CarState = StopCarInfo.State.In;
}
// 离开停车场
if (car.CarState == StopCarInfo.State.Out)
{
var hh = (car.PassTime - car.StopTime).Seconds;
var mm = (car.PassTime - car.StopTime).Milliseconds;
if (hh > 1)
{
car.All_Fee = hh * 2;
}
if (mm > 15)
{
car.All_Fee += 2;
}
// 停车费用
System.Console.WriteLine(car.All_Fee);
// 收费完成
car.CarState = StopCarInfo.State.Finish;
}
//收费的经过时间
car.PassTime = car.PassTime.AddSeconds(1);
}
}
}
[解决办法]
var hh = (car.PassTime - car.StopTime).Hours;
var mm = (car.PassTime - car.StopTime).Minutes;
[解决办法]


static void Main(string[] args)
{
//输入的开始时间和结束时间
DateTime dtStart = DateTime.Parse("2013-11-03 12:30:10");
DateTime dtEnd = DateTime.Parse("2013-11-07 1:20:00");

//一共多少天
int iDays = (dtEnd.Date - dtStart.Date).Days + 1;


//总金额
int all_fee = 0;
if (iDays > 1)
{
//跨天的每天8小时
all_fee += (iDays - 1) * 8 * 2;
}
//取出考虑免费后的时间
DateTime dtStartRevision = GetRevisionTime(dtStart);
DateTime dtEndRevision = GetRevisionTime(dtEnd);
TimeSpan ts = dtEndRevision - dtStartRevision;

all_fee += ts.Hours * 2;

//多退少补
if (ts.Minutes >= 15)
{
all_fee += 2;
}
else if (ts.Minutes < -45)
{
all_fee -= 2;
}
}

private static DateTime GetRevisionTime(DateTime dt)
{
DateTime dtRevision = new DateTime(1900, 1, 1, dt.Hour,dt.Minute,dt.Second);
if (dt.Hour > 23)
{
dtRevision = dtRevision.AddHours(-16);
}
else if (dt.Hour > 7)
{
dtRevision = new DateTime(dtRevision.Year, dtRevision.Month, dtRevision.Day, 7, 0, 0);
}
return dtRevision;
}


[解决办法]
引用
请问这个1900,1,1是什么意思呢?

没有什么意思,只是想让开始时间和结束时间在同一天,方便2个时间相减。

[解决办法]
我发现很多程序员小学数学都没学过一样,数钱都数不清。

读书人网 >C#

热点推荐