TimeSpan转换

时间:2016-12-03 21:34:01

标签: c# timespan seconds minute

我想将分钟转换为秒,此刻我遇到了问题,因为在分钟文本框中输入1.50时结果为90秒,这是错误的,因为1.30 = 90秒

    private void MtoCbutton_Click(object sender, EventArgs e)
    {
        if (minTosecTextBox.Text != "Minutes")
        {
            minutes = Convert.ToDouble(minTosecTextBox.Text);
            TimeSpan span = TimeSpan.FromMinutes(minutes);
            resultSectextBoxtextBox.Text = span.TotalSeconds.ToString();
        }

        else
        {

            MessageBox.Show("Please enter Minutes");
        }

3 个答案:

答案 0 :(得分:7)

您可能正在寻找类似TimeSpan.Parse方法的内容:

var ts = TimeSpan.Parse("00:01:30");

这将产生90秒的TimeSpan。

还有一个ParseExact方法,可让您指定格式字符串,因此您不必每次都指定小时数,甚至可以指定一个点作为分隔符:

var ts = TimeSpan.ParseExact("01.30", @"mm\.ss", System.Globalization.CultureInfo.InvariantCulture);

有关格式字符串,请参阅Custom Date and Time format strings

另请注意,您需要转义要按字面解释的每个字符(因此\之前的.

您案例的完整代码

var ts = TimeSpan.ParseExact(minTosecTextBox.Text, @"mm\.ss", System.Globalization.CultureInfo.InvariantCulture);
resultSectextBoxtextBox.Text = ts.TotalSeconds.ToString();

答案 1 :(得分:2)

您需要以不同方式处理文本的转换。您将“1.50”直接转换为双倍,即1.5和1,而1/2分钟相当于90秒。如果要允许用户键入“1.50”并表示1分50秒,则需要拆分字符串。你可以这样做:

var split = text.Split('.');
int seconds = 0;
if (split.Length > 1)
{
    seconds = int.Parse(split[1]);
}
seconds += TimeSpan.FromMinutes(split[0]).Seconds;

注意 - 如果您没有验证文本,那么最终可能会失败。您应该使用TryParse来验证秒数。 Parse可以抛出异常。

答案 2 :(得分:-2)

要从秒转换为分钟,您只需要除以60.0(您需要小数或它将被视为整数)。如果处理为整数并且你通过30秒,30/60将等于0.

也使用double.TryParse方法。现在,如果有人输入1.50xx,您的应用程序将崩溃。使用double.TryParse方法或使用try catch机制或仅允许数字输入。

修改

这将完成你想要的。我添加了一个标签来显示输出,但你可以删除它。

double enteredNumber;
if (double.TryParse(minTosecTextBox.Text, out enteredNumber))
{
    // This line will get everything but the decimal so if entered 1.45, it will get 1
    double minutes = Math.Floor(enteredNumber);

    // This line will get the seconds portion from the entered number.
    // If the number is 1.45, it will get .45 then multiply it by 100 to get 45 secs
    var seconds = 100 * (enteredNumber - Math.Floor(enteredNumber));

    // now we multiply minutes by 60 and add the seconds
    var secondsTotal = (minutes * 60 + seconds);

    this.labelSeconds.Text = secondsTotal.ToString();
}

else
{

    MessageBox.Show("Please enter Minutes");
}

编辑2

进一步澄清

你没有将分钟转换为秒,因为如果你是1.5(1分半)将等于90秒。这是合乎逻辑且明显的。您只将小数点前的部分视为分钟,将小数点后的部分视为秒(1.30 = 1分30秒= 90秒)。 因此,我们只需要将小数点前的部分转换为秒,然后将小数点后的部分添加到它。