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