Ejemplo n.º 1
0
        // 计算时间之间的距离
        // parameters:
        //      calendar    工作日历。如果为null,表示函数不进行非工作日判断。
        // return:
        //      -1  出错
        //      0   成功。timeEnd在工作日范围内。
        //      1   成功。timeEnd正好在非工作日。nextWorkingDay已经返回了下一个工作日的时间
        public static int GetTimeDistance(
            Calendar calendar,
            string strUnit,
            DateTime timeStart,
            DateTime timeEnd,
            out long lValue,
            out DateTime nextWorkingDay,
            out string strError)
        {
            lValue = 0;
            strError = "";
            nextWorkingDay = DateTime.MinValue;

            int nRet = DateTimeUtil.RoundTime(strUnit,
                ref timeStart,
                out strError);
            if (nRet == -1)
                return -1;

            nRet = DateTimeUtil.RoundTime(strUnit,
                ref timeEnd,
                out strError);
            if (nRet == -1)
                return -1;

            bool bInNonWorkingDay = false;

            // 看看末端是否正好在非工作日
            if (calendar != null)
            {
                bInNonWorkingDay = calendar.IsInNonWorkingDay(timeEnd,
                    out nextWorkingDay);
                nRet = DateTimeUtil.RoundTime(strUnit,
    ref nextWorkingDay,
    out strError);
                if (nRet == -1)
                    return -1;
            }

            TimeSpan delta;

            delta = timeEnd - timeStart;

            if (strUnit == "day")
            {
                lValue = (long)delta.TotalDays;
            }
            else if (strUnit == "hour")
            {
                lValue = (long)delta.TotalHours;
            }
            else
            {
                strError = "未知的时间单位 '" + strUnit + "'";
                return -1;
            }

            if (bInNonWorkingDay == true)
            {
                Debug.Assert(nextWorkingDay != DateTime.MinValue, "");
                return 1;
            }

            return 0;
        }
Ejemplo n.º 2
0
        // 测算还书日期
        // parameters:
        //      calendar    工作日历。如果为null,表示函数不进行非工作日判断。
        //      timeStart   借阅开始时间。GMT时间
        //      timeEnd     返回应还回的最后时间。GMT时间
        // return:
        //      -1  出错
        //      0   成功。timeEnd在工作日范围内。
        //      1   成功。timeEnd正好在非工作日。nextWorkingDay已经返回了下一个工作日的时间
        public static int GetReturnDay(
            Calendar calendar,
            DateTime timeStart,
            long lPeriod,
            string strUnit,
            out DateTime timeEnd,
            out DateTime nextWorkingDay,
            out string strError)
        {
            strError = "";
            timeEnd = DateTime.MinValue;
            nextWorkingDay = DateTime.MinValue;

            // 正规化时间
            int nRet = DateTimeUtil.RoundTime(strUnit,
                ref timeStart,
                out strError);
            if (nRet == -1)
                return -1;

            TimeSpan delta;

            if (strUnit == "day")
                delta = new TimeSpan((int)lPeriod, 0, 0, 0);
            else if (strUnit == "hour")
                delta = new TimeSpan((int)lPeriod, 0, 0);
            else
            {
                strError = "未知的时间单位 '" + strUnit + "'";
                return -1;
            }

            timeEnd = timeStart + delta;

            // 正规化时间
            nRet = DateTimeUtil.RoundTime(strUnit,
                ref timeEnd,
                out strError);
            if (nRet == -1)
                return -1;

            bool bInNonWorkingDay = false;

            // 看看末端是否正好在非工作日
            if (calendar != null)
            {
                bInNonWorkingDay = calendar.IsInNonWorkingDay(timeEnd,
                    out nextWorkingDay);
                nRet = DateTimeUtil.RoundTime(strUnit,
    ref nextWorkingDay,
    out strError);
                if (nRet == -1)
                    return -1;
            }

            if (bInNonWorkingDay == true)
            {
                Debug.Assert(nextWorkingDay != DateTime.MinValue, "");
                return 1;
            }

            return 0;
        }