从时间跨度总小时数和分钟数中提取

问题描述 投票:0回答:4

我从

TimeSpan.TotalHours
24,75 小时开始。 我怎样才能将其转换为完整的而不是圆形的小时(= 24)加上分钟(0.75小时= 45分钟)?所以结果应该是小时 = 24 分钟 = 45

我尝试将其转换为字符串并制作子字符串,但我想知道是否有比这更好的方法。

string test = Reststunden.TotalHours.ToString().Substring(Reststunden.TotalHours.ToString().IndexOf(","),3).Replace(",", "");
double Minuten = Convert.ToInt16(test) * 0.6;
c# timespan
4个回答
8
投票

好吧,通过强制转换适当舍入总小时数,然后使用

Minutes
属性:

int hours = (int) timeSpan.TotalHours;
int minutes = timeSpan.Minutes;

如果您的结果是否定的

TimeSpan
,您应该考虑您想要的结果并添加适当的测试 - 您很可能会发现上面的简单代码并不能达到您想要的效果。


7
投票

怎么样:

var ts = TimeSpan.FromHours(24.75);
var h = System.Math.Floor(ts.TotalHours);
var m = (ts.TotalHours - h) * 60;

甚至:

var h = (int) (ts.TotalMinutes / 60);
var m = ts.TotalMinutes % 60;

0
投票

我需要以以下格式显示总小时和分钟:HH:mm。 在其他答案的帮助下,我得到了以下结果:

var end = DateTime.Now;
var duration = end - StartUpTime;
var h = (int)(duration.TotalMinutes / 60);
var m = (int)(duration.TotalMinutes % 60);
var text = $"{h:D2}:{m:D2}";

0
投票

我需要以以下格式显示总小时和分钟:HH:mm。 使用下面的扩展方法。

public static string TohhmmFormatString(this TimeSpan timeSpan)
{
    string totalHours = ((int)timeSpan.TotalHours).ToString();
    string minutes = timeSpan.Minutes.ToString();
    if (timeSpan.Seconds == 59 && (timeSpan.Milliseconds == 999 || timeSpan.Microseconds == 999))
    {
        if (timeSpan.Minutes + 1 == 60)
        {
            minutes = "00";
            totalHours = ((int)timeSpan.TotalHours + 1).ToString();
        }
        else
        {
            minutes = (timeSpan.Minutes + 1).ToString();
        }
    }
    return $"{totalHours}:{minutes}";
 }
© www.soinside.com 2019 - 2024. All rights reserved.