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;
    }

原创粉丝点击