我试图将一个小时的小时数转换为天,小时和分钟。
到目前为止,这是我所拥有的,它尚未完全存在。如果有意义,我需要从小时部分中减去小时数?
/// <summary>
/// Converts from a decimal value to DD:HH:MM
/// </summary>
/// <param name="dHours">The total number of hours</param>
/// <returns>DD:HH:MM string</returns>
public static string ConvertFromDecimalToDDHHMM(decimal dHours)
{
try
{
decimal hours = Math.Floor(dHours); //take integral part
decimal minutes = (dHours - hours) * 60.0M; //multiply fractional part with 60
int D = (int)Math.Floor(dHours / 24);
int H = (int)Math.Floor(hours);
int M = (int)Math.Floor(minutes);
//int S = (int)Math.Floor(seconds); //add if you want seconds
string timeFormat = String.Format("{0:00}:{1:00}:{2:00}", D, H, M);
return timeFormat;
}
catch (Exception)
{
throw;
}
}
SOLUTION:
/// <summary>
/// Converts from a decimal value to DD:HH:MM
/// </summary>
/// <param name="dHours">The total number of hours</param>
/// <returns>DD:HH:MM string</returns>
public static string ConvertFromDecimalToDDHHMM(decimal dHours)
{
try
{
decimal hours = Math.Floor(dHours); //take integral part
decimal minutes = (dHours - hours) * 60.0M; //multiply fractional part with 60
int D = (int)Math.Floor(dHours / 24);
int H = (int)Math.Floor(hours - (D * 24));
int M = (int)Math.Floor(minutes);
//int S = (int)Math.Floor(seconds); //add if you want seconds
string timeFormat = String.Format("{0:00}:{1:00}:{2:00}", D, H, M);
return timeFormat;
}
catch (Exception)
{
throw;
}
}
答案 0 :(得分:37)
您可以使用TimeSpan.FromHours
来获取时间跨度,然后就可以获得所需的一切:
TimeSpan ts = TimeSpan.FromHours(Decimal.ToDouble(dHours));
例如:
int D = ts.Days;
int H = ts.Hours;
int M = ts.Minutes;
答案 1 :(得分:3)
您需要从小时中减去(D * 24)
...或者您可以使用:
int H = ((int) dHours) % 24;
如果您要转换为int
,则无需致电Math.Floor
。例如,您实际上可以使用:
// I'd rename dHours as well, by the way...
int wholeHours = (int) dHours;
int days = wholeHours / 24;
int hours = wholeHours % 24;
int minutse = (int) ((dHours % 1M) * 60);
另一方面,如果它可能是负面的,你需要小心 - 在这种情况下,各种各样的事情最终会变得棘手。如果你不相信你必须处理这个问题,我会明确检查它并在dHours
为负数之前抛出异常,然后再做其他事情。
(请注意,您的try / catch块目前毫无意义且令人分心。只需摆脱它。)
答案 2 :(得分:2)
为什么不做这样的事情?
double d = 25.23523;
Timespan t = TimeSpan.FromHours(d);
这会给你:
t = 1.01:14:06.8280000
然后,您可以根据需要查询TimeSpan
对象:http://msdn.microsoft.com/en-us/library/system.timespan.aspx
注意:TimeSpan.FromHours
需要double
输入,而不是decimal
。
答案 3 :(得分:2)
简单。
double counter = 0.25;
TimeSpan span = TimeSpan.FromMinutes(counter);
textbox1.Text = span.ToString(@"hh\:mm\:ss");
结果将是00:00:15秒。如果counter = 1,那么结果将是00:01:00,依此类推。
答案 4 :(得分:0)
这是另一个解释它非常好的帖子。
Convert date to string format yyyy-mm-dd HH:MM:SS - C#
DateTime.ToString(“yyyy-MM-dd hh:mm:ss”);
也
答案 5 :(得分:0)
public static string GetTimeString(Decimal dHours)
{
DateTime dTime = new DateTime().AddHours(dHours);
return dTime.ToString("HH:mm:ss"); // HH: 24h or hh: 12h
}