コード例 #1
0
        public void Calculate(PaceData calcData)
        {
            switch ((calcData.Calc ?? "").ToLower())
            {
            case "distance":
                CalculateDistance(calcData);
                break;

            case "time":
                CalculateTime(calcData);
                break;

            case "pace":
                CalculatePace(calcData);
                break;

            case "pacekmunits":
                ConvertPace(calcData, DistanceUnits.Kilometers);
                break;

            case "pacemilesunits":
                ConvertPace(calcData, DistanceUnits.Miles);
                break;

            case "normalizetime":
                NormalizeTime(calcData);
                break;
            }
        }
コード例 #2
0
        private void CalculatePace(PaceData calcData)
        {
            calcData.Pace = "0";

            if (!calcData.HasDistance || !calcData.HasTime)
            {
                return;
            }

            if (!calcData.HasDistance)
            {
                return;
            }
            var distance = calcData.Distance.BaseDistance; // distance in user's units

            var time = 0;                                  // seconds

            if (string.IsNullOrWhiteSpace(calcData.Time))
            {
                return;
            }

            var timePortions = calcData.Time.Split(':');

            var hours   = 0;
            var minutes = 0;
            var seconds = 0;

            // mm or mm:ss or hh:mm:ss
            if (timePortions.Length == 1) // mm
            {
                int.TryParse(timePortions[0], out minutes);
            }
            else if (timePortions.Length == 2) // mm:ss
            {
                int.TryParse(timePortions[0], out minutes);
                int.TryParse(timePortions[1], out seconds);
            }
            else // hh:mm:ss
            {
                int.TryParse(timePortions[0], out hours);
                int.TryParse(timePortions[1], out minutes);
                int.TryParse(timePortions[2], out seconds);
            }
            time = (hours * 60 * 60) + (minutes * 60) + seconds;

            if (time == 0 || distance == 0)
            {
                return;
            }

            calcData.PaceInSeconds = time / distance;
            calcData.Pace          = PaceToString(calcData.PaceInSeconds.Value);
        }
コード例 #3
0
        private void NormalizeTime(PaceData calcData)
        {
            if (!calcData.HasTime)
            {
                return;
            }

            var time = 0; // seconds

            if (string.IsNullOrWhiteSpace(calcData.Time))
            {
                return;
            }

            var timePortions = calcData.Time.Split(':');

            var hours   = 0;
            var minutes = 0;
            var seconds = 0;

            // mm or mm:ss or hh:mm:ss
            if (timePortions.Length == 1) // mm
            {
                int.TryParse(timePortions[0], out minutes);
            }
            else if (timePortions.Length == 2) // mm:ss
            {
                int.TryParse(timePortions[0], out minutes);
                int.TryParse(timePortions[1], out seconds);
            }
            else // hh:mm:ss
            {
                int.TryParse(timePortions[0], out hours);
                int.TryParse(timePortions[1], out minutes);
                int.TryParse(timePortions[2], out seconds);
            }
            time = (hours * 60 * 60) + (minutes * 60) + seconds;
            var timeVal = TimeSpan.FromSeconds(time);

            calcData.Time = timeVal.ToString(timeVal.TotalHours > 0 ? "hh\\:mm\\:ss" : "mm\\:ss");
        }
コード例 #4
0
        private void ConvertPace(PaceData calcData, DistanceUnits fromUnits)
        {
            if (!calcData.HasPace)
            {
                return;
            }

            double pace         = 0; // pace in seconds / miles
            var    pacePortions = calcData.Pace.Split(':');

            var paceMinutes = 0;
            var paceSeconds = 0;

            // mm or mm:ss
            if (pacePortions.Length == 1) // mm
            {
                int.TryParse(pacePortions[0], out paceMinutes);
            }
            else // mm:ss
            {
                int.TryParse(pacePortions[0], out paceMinutes);
                int.TryParse(pacePortions[1], out paceSeconds);
            }
            pace = (paceMinutes * 60) + paceSeconds;

            if (fromUnits == DistanceUnits.Miles)
            {
                pace *= DistanceCalculator.MilesToKilometers;
            }
            else if (fromUnits == DistanceUnits.Kilometers)
            {
                pace *= DistanceCalculator.KilometersToMiles;
            }
            else
            {
                return;
            }

            calcData.Pace = string.Format("{0}:{1}", Convert.ToInt32(Math.Floor(pace / 60)).ToString("0"), Math.Floor(pace % 60).ToString("00"));
        }
コード例 #5
0
        private void CalculateTime(PaceData calcData)
        {
            calcData.Time = "0";

            if (!calcData.HasDistance || !calcData.HasPace)
            {
                return;
            }

            var pace         = 0; // pace in seconds / miles
            var pacePortions = calcData.Pace.Split(':');

            var paceMinutes = 0;
            var paceSeconds = 0;

            // mm or mm:ss
            if (pacePortions.Length == 1) // mm
            {
                int.TryParse(pacePortions[0], out paceMinutes);
            }
            else // mm:ss
            {
                int.TryParse(pacePortions[0], out paceMinutes);
                int.TryParse(pacePortions[1], out paceSeconds);
            }
            pace = (paceMinutes * 60) + paceSeconds;

            if (!calcData.HasDistance)
            {
                return;
            }
            var distance = calcData.Distance.BaseDistance; // distance in user units

            if (pace == 0 || distance == 0)
            {
                return;
            }

            calcData.Time = TimeSpan.FromSeconds(distance * pace).ToString("hh\\:mm\\:ss");
        }
コード例 #6
0
        private void CalculateDistance(PaceData calcData)
        {
            if (!calcData.HasPace || !calcData.HasTime || calcData.Distance == null)
            {
                return;
            }

            var pace         = 0; // pace in seconds / miles
            var pacePortions = calcData.Pace.Split(':');

            var paceMinutes = 0;
            var paceSeconds = 0;

            // mm or mm:ss
            if (pacePortions.Length == 1) // mm
            {
                int.TryParse(pacePortions[0], out paceMinutes);
            }
            else // mm:ss
            {
                int.TryParse(pacePortions[0], out paceMinutes);
                int.TryParse(pacePortions[1], out paceSeconds);
            }
            pace = (paceMinutes * 60) + paceSeconds;

            var time = 0; // seconds

            if (string.IsNullOrWhiteSpace(calcData.Time))
            {
                return;
            }

            var timePortions = calcData.Time.Split(':');

            var hours   = 0;
            var minutes = 0;
            var seconds = 0;

            // mm or mm:ss or hh:mm:ss
            if (timePortions.Length == 1) // mm
            {
                int.TryParse(timePortions[0], out minutes);
            }
            else if (timePortions.Length == 2) // mm:ss
            {
                int.TryParse(timePortions[0], out minutes);
                int.TryParse(timePortions[1], out seconds);
            }
            else // hh:mm:ss
            {
                int.TryParse(timePortions[0], out hours);
                int.TryParse(timePortions[1], out minutes);
                int.TryParse(timePortions[2], out seconds);
            }
            time = (hours * 60 * 60) + (minutes * 60) + seconds;

            if (pace == 0 || time == 0)
            {
                return;
            }

            var distance = time / (double)pace;

            calcData.Distance = new Distance(distance, calcData.Distance.BaseUnits);
        }