在c#.net中计算时间时,如何计算时间

时间:2016-11-23 11:52:41

标签: c#

这是我的代码

private void button2_Click(object sender, EventArgs e)
{
    try
    {
        ans = double.Parse(txtb1.Text) - double.Parse(txtb2.Text);

        string time = ans.ToString();
        double seconds = TimeSpan.Parse(time); // Duration is not working

        label1.Text = seconds.ToString();  
    }
    catch (Exception ex) 
    {
        MessageBox.Show(ex.Message);
    }
}       

我试图从点之后向上舍入,即如果它大于或等于60,它应该将一个加到整数并从尾数(十进制)中减去它 我的意思是,如果我的值为1.70,我应该有2.10,即2小时10分钟

3 个答案:

答案 0 :(得分:1)

如果您想使用逻辑操作1.70的倍数值到小时和分钟,您应该执行以下操作。

var dbl = 1.70;

var hours = Math.Floor(dbl);
var minutes = (dbl - hours) * 100;
var ts = TimeSpan.FromHours(hours).Add(TimeSpan.FromMinutes(minutes));

Console.WriteLine("{0}h {1}min", Math.Floor(ts.TotalHours), ts.Minutes);

如果您的值实际上是“{Hours}。{Minutes}”并且可以在100小时内获得“100.500”500分钟,那么您需要更改解析值的方式以获得小时和分钟。

答案 1 :(得分:0)

您可能正在寻找Math.Ceiling(ans)。 它总是向上舍入,即使十进制值低于0.5

答案 2 :(得分:0)

如果您想根据发布的格式更正时间字符串,我建议使用此方法:

public static double correctTime(string commaTime)
{
    double d = Convert.ToDouble(commaTime, CultureInfo.InvariantCulture);

    int basis = (int)d;
    // if the number after the comma is larger than 0.6 then just add 0.4
    return d - basis > 0.6 ? d = d + 0.4 : d;
}

至于转换为TimeSpan,您需要将您的号码设置为正确的格式:

string s = "1.7";

double cor_s = correctTime(s);
string time = cor_s.ToString("00.00").Replace('.', ':'); // or

现在您可以将其解析为TimeSpan

TimeSpan t = TimeSpan.Parse(time);

或者如果你只想要秒:

double total_seconds = TimeSpan.Parse(time).TotalSeconds;

我希望我能正确理解你的问题