c#不同时间段、不同费率计算费用
来源:互联网 发布:家有网络怎么看电视 编辑:程序博客网 时间:2024/05/02 04:45
/// <summary>
/// 时间段计费元/时)
/// </summary>
/// <param name="huan_time1">还时间</param>
/// <param name="jie_time1">接时间</param>
/// <param name="fl_B1">白天费率</param>
/// <param name="fl_W1">晚上费率</param>
/// <param name="tt1">白天起点时间</param>
/// <param name="tt2">晚上起点时间</param>
public void jifei(string huan_time1,string jie_time1,string fl_B1,string fl_W1,int tt1,int tt2)
{
DateTime huan_time = Convert.ToDateTime(Time_1(huan_time1));
DateTime jie_time = Convert.ToDateTime(Time_1(jie_time1));
TimeSpan huan_time5 = new TimeSpan(huan_time.Ticks);
TimeSpan jie_time5 = new TimeSpan(jie_time.Ticks);
TimeSpan TT = huan_time5.Subtract(jie_time5).Duration();
int ccc=(int)TT.TotalHours;
if(ccc ==0)
{
huan_time = huan_time.AddHours(1);
}
double fl_B = Convert.ToDouble(fl_B1.Substring(1)); //为白天费率
double fl_W = Convert.ToDouble(fl_W1.Substring(1)); // 为晚费率
int t = jie_time.Hour; //借时刻
int h = huan_time.Hour; //还时刻
int hh = DateDiff_hour(jie_time, huan_time); //总时间
int t1 = tt1; //t1设置白天起点
int t2 = tt2; //t2设置晚上起点
int t00 = 0; // 凌晨0点
int t23 = 24;// 晚上24(0点之前)点
int hb = 0; //hb为白时间和
int hw = 0; //hw为晚时间和
if ((hh% 24) !=0) //借不是整天
{
//晚上借出
if (((t2 <= t) && (t <= t23)) || ((t00 <= t) && (t <= t1)))
{
//晚上归还
if (((t2 <= h) && (h <= t23)) || ((t00 <= h) && (h <= t1)))
{
//还时,在t2于t23时段借出
if ((t2 <= t) && (t <= t23))
{
//t2与t23时段还
if ((t2 <= h) && (h <= t23))
{
//借t大于还h
if (t > h)
{
int hw1 = DateDiff_hour(t, t23); //借至23点
int hw2 = DateDiff_hour(t00, t1); //00至白天起点
int hw3 = DateDiff_hour(h, t2); //晚上起点至还
hw = hw1 + hw2 + hw3; //共合计晚上时间
hb = DateDiff_hour(t1, t2); //共合计白天时间
}
else //借t小于还h
{
hw = DateDiff_hour(t, h);
hb = 0;
}
}
else //t00与t1时段还
{
int hw1 = DateDiff_hour(t, t23); //借至23点
int hw2 = DateDiff_hour(t00, h); //00至还时间
hw = hw1 + hw2; //共合计晚上时间
hb = 0;
}
}
else //还时,在00于t1时段借出
{
//t2与t23时段还
if ((t2 <= h) && (h <= t23))
{
int hw1 = DateDiff_hour(t, t1); //借至白天起点
int hw2 = DateDiff_hour(t2, h); //晚上起点至还
hb = DateDiff_hour(t1, t2); //白天起点至晚上起点
hw = hw1 + hw2; //共合计晚上时间
}
else //t00与t1时段还
{
//借t大于还h
if (t > h)
{
int hw1 = DateDiff_hour(t, t1); //借至白天起点
int hw2 = DateDiff_hour(t2, t23); //晚上起点至23
int hw3 = DateDiff_hour(t00, h); //00至还
hw = hw1 + hw2 + hw3; //共合计晚上时间
hb = DateDiff_hour(t1, t2); //共合计白天时间
}
else //借t小于还h
{
hw = DateDiff_hour(t, h);
hb = 0;
}
}
}
}
else //白天归还
{
//还时,在t2于t23时段借出
if ((t2 <= t) && (t <= t23))
{
int hw1 = DateDiff_hour(t, t23); //借至23
int hw2 = DateDiff_hour(t00, t1); //00至白天起点
hw = hw1 + hw2; //共合计晚上时间
hb = DateDiff_hour(t1,h); //共合计白天时间
}
else //还时,在00于t1时段借出
{
hw = DateDiff_hour(t, t1); //共合计晚上时间
hb = DateDiff_hour(t1, h); //共合计白天时间
}
}
}
else //白天借出
{
//晚上归还
if (((t2 <= h) && (h <= t23)) || ((t00 <= h) && (h <= t1)))
{
//还时,在t2于t23时段
if ((t2 <= h) && (h <= t23))
{
hw = DateDiff_hour(t2, h); //共合计晚上时间
hb = DateDiff_hour(t, t2); //共合计白天时间
}
else //t00与t1时段还
{
int hw1 = DateDiff_hour(t2, t23); //晚上起点至23
int hw2 = DateDiff_hour(t00, h); //00至还
hw = hw1 + hw2; //共合计晚上时间
hb = DateDiff_hour(t, t2); //共合计白天时间
}
}
else //白天归还
{
//借t大于还h
if (t > h)
{
int hw1 = DateDiff_hour(t2, t23); //晚上起点至23
int hw2 = DateDiff_hour(t00, t1); //00至白天起点
hw = hw1 + hw2; //共合计晚上时间
int hb1 = DateDiff_hour(t, t2); //借至晚上起点
int hb2 = DateDiff_hour(t1, h); //白天起点至还
hb = hb1 + hb2; //共合计白天时间
}
else //借t小于还h
{
hw = 0;
hb = DateDiff_hour(t, h); //共合计白天时间
}
}
}
//至少一天
if (hh > 24)
{
int Days = hh / 24; //天数
int T_bai = DateDiff_hour(t1, t2); //共计白天小时
int T_wan = 24 - T_bai; //共计晚上小时
hb += Days * T_bai;
hw += Days * T_wan;
}
}
else //借整天
{
int Days = hh / 24; //天数
int T_bai = DateDiff_hour(t1, t2); //共计白天小时
int T_wan = 24 - T_bai; //共计晚上小时
hb = Days * T_bai;
hw = Days * T_wan;
}
}
/// <summary>
/// 时间装换,舍去分秒
/// </summary>
/// <param name="time1"></param>
/// <returns></returns>
protected string Time_1(string time1)
{
string reTime = "";
DateTime dt = Convert.ToDateTime(time1);
string dyear =dt.Year.ToString();
string dmonth = Ti(dt.Month.ToString());
string dday = Ti(dt.Day.ToString());
string dhour = Ti(dt.Hour.ToString());
reTime = dyear + "-" + dmonth + "-" + dday + " " + dhour + ":00";
return reTime;
}
/// <summary>
/// 小于10自动加 0
/// </summary>
/// <param name="num"></param>
/// <returns></returns>
protected string Ti(string num)
{
string num1 = num;
int i=Convert.ToInt32(num); //
if (i < 10)
{
num1 = "0" + i.ToString();
}
return num1;
}
/// <summary>
///计算两个日期的时间间隔,返回的是时间间隔的日期差的绝对值.
/// </summary>
/// <param name="DateTime1">第一个日期和时间</param>
/// <param name="DateTime2">第二个日期和时间</param>
/// <returns>小时</returns>
private int DateDiff_hour(DateTime DateTime1, DateTime DateTime2)
{
int dateDiff = 0;
try
{
TimeSpan ts1 = new TimeSpan(DateTime1.Ticks);
TimeSpan ts2 = new TimeSpan(DateTime2.Ticks);
TimeSpan ts = ts1.Subtract(ts2).Duration();
dateDiff = (int)ts.TotalHours;
if (dateDiff == 0)
{
dateDiff += 1;
}
}
catch
{
}
return dateDiff;
}
/// <summary>
/// 自定义小时减
/// </summary>
/// <param name="t1"></param>
/// <param name="t2"></param>
/// <returns></returns>
protected int DateDiff_hour(int t1, int t2)
{
int dateDiff = 0;
try
{
dateDiff = t2 - t1;
}
catch
{
}
return dateDiff;
}
- c#不同时间段、不同费率计算费用
- 不同时间段显示不同问候
- 不同时间段值得选择
- 上下班的判断(不同季度不同时间段)
- C#实例之计算字符串中不同字符的个数
- 不同数据类型的计算
- 不同
- 不同
- C#中计算时间段内工作日期
- c#如何计算当月\季度时间段
- C# 连接不同数据库
- C#适应不同分辨率
- C#获取不同分辨率
- C#生成不同随机数
- 相同语句,时间段不一样,不同执行计划分析心得
- 按照上下午或不同时间段显示不同网页背景的js特效
- EXCEL 控制图(自动更新/比较不同时间段/调用不同变量) Control Charts
- js控制不同的时间段显示不同的css样式的实例代码
- asp.net页面中用JS回车触发事件
- Asp.net中RegisterStartupScript方法的使用
- 单击头模板中的checkbox,实现datalist中所有chebox的全选和取消
- 心情
- ASP.NET备份恢复SqlServer数据库
- c#不同时间段、不同费率计算费用
- 控件用Js验证大全
- 每天编程2小时,累
- asp.net退出,注销
- ASP.NET页面加载中效果实现
- 程序
- DropDownList绑定后显示默认值
- 类与对象
- C# winfrom判断文件是否存在,不存在则创建,否则读取值显示到窗体