I always used to have issues when debugging time related issues in AX. Time is saved in seconds so many time when you want to know the actual time associated with it in hh : mm : ss, you will either have to do it in mind or use a calculator. In order to simplify debugging I have created a small C# based console application that takes seconds as input and returns the time in actual format.
The code is below and you can compile it in visual studio to make it work.
Enjoy!
Download the application from
here.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Decimal2Hours
{
class Program
{
static void Main(string[] args)
{
while (true)
{
Console.WriteLine(Program.ConvertSecondsToHoursMinutes(Console.ReadLine()));
}
}
public static string ConvertDecimalToHours(string paramHours)
{
int realPart;
int decimalPart;
decimal hours;
string hoursStr;
string minStr;
int decimalLocation;
string finalMinutes;
decimal _hours = decimal.Parse(paramHours);
;
try
{
hours = _hours;
hoursStr = hours.ToString();
decimalLocation = hoursStr.IndexOf(".");
hoursStr = hoursStr.Substring(0, decimalLocation);
hoursStr = hoursStr.Trim(new char[] { '.' });
minStr = hours.ToString();
minStr = minStr.Substring(decimalLocation);
minStr = minStr.Trim(new char[] { '.' });
realPart = Convert.ToInt32(hoursStr);
decimalPart = Convert.ToInt32(Math.Floor((decimal)Convert.ToDecimal("0." + minStr) * 60));
finalMinutes = (realPart.ToString().Length == 1 ? "0" + realPart.ToString() : realPart.ToString())
+ ":" +
(decimalPart.ToString().Length == 1 ? "0" + decimalPart.ToString() : decimalPart.ToString());
return finalMinutes;
}
catch
{
return paramHours;
}
}
public static string ConvertSecondsToHoursMinutes(string paramSeconds)
{
string finalTime;
int seconds = Convert.ToInt32(paramSeconds);
int result;
int hours = Math.DivRem(seconds, 60 * 60, out result);
seconds = result;
int minutes = Math.DivRem(seconds, 60, out result);
seconds = result;
finalTime = hours.ToString() + " : " + minutes.ToString() + " : " + seconds.ToString();
return finalTime;
}
}
}