如何在文本框中使用双?

时间:2016-08-25 09:32:12

标签: c# variables textbox

我想编写一个代码,用于读取用户写入textbox1的时间,比如09:00(hh:mm),将其保存到变量中,然后获取此变量并将其添加到08:40并输出然后结果17:40进入textbox2。

问题是,当使用double时它运行良好,但我需要使用hh:mm - 格式,我知道有些语言有选项来声明一个变量作为时间,但似乎c#不这样做。那么解决方案是什么? 那是我现在的代码

    void CmdWriteClick(object sender, EventArgs e)
    {
        string varstr = textbox_1.Text;
        double muss = 8.40;
        double vardb = Convert.ToDouble(varstr);
        double end = vardb + muss;
        textbox_2.Text = end.ToString();
    }

这当然会输出我的双数字。因此,如果varstr是08.30,当我需要输出17:10时输出16,7。任何帮助表示赞赏

谢谢你们

5 个答案:

答案 0 :(得分:2)

你不应该使用TextBox。您有一个特定的控件来处理日期和时间:DateTimePicker

将其中一个添加到表单中。如果您只希望用户修改时间,禁止更改日期,则可以执行以下操作:

public myForm()
{
    InitializeComponent();
    ....
    myDateTimePicker.Format = DateTimePickerFormat.Custom;
    myDateTimePicker.CustomFormat = "HH:mm"; //Shows only hours and minutes in 24h format
    myDateTimePicker.Value = DateTime.Now.Date; //sets the time to today at 0:00
    myDateTimePicker.MinDate = DateTime.Now.Date;
    myDateTimePicker.MaxDate = DateTime.Now.Date.Add(new TimeSpan(23, 59, 59)); //User can't change date.
}

private DateTime newTime;
private void myDateTimePicker_ValueChanged(object sender, EventArgs e)
{
    newTime = myDateTimePicker.Value.AddHours(8.5);
}

显然,如果您希望用户也设置日期,只需将MinValueMaxValue限制更改为您的要求(如果有),并选择一个预定义的格式选项而不是{{ 1}}。

答案 1 :(得分:1)

试试这个:

 dateValue.AddHours(8);
 dateValue.AddMinutes(30);

答案 2 :(得分:0)

您可以使用DateTime而不是double。

uuid

答案 3 :(得分:0)

你可以这样做:

string input = textbox_1.Text;
DateTime inputTime;
if (DateTime.TryParseExact(input, "HH:mm", CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None, out inputTime))
{
      DateTime outputTime=inputTime.AddHours(8).AddMinutes(40);
      textbox_2.Text = outputTime.ToString("HH:mm");
}

基本上,您将输入字符串解析为DateTime变量,添加所需的时间,然后转换回字符串以在TextBox

中显示它

答案 4 :(得分:0)

如果你真的想用双倍做,你必须考虑从分钟到整数的转换。 8.4将是60 * .4 = 24分钟。

对于其余部分,您可以使用TimeSpan.Parse解析文本字符串,并且可以编写一个自定义函数,将双精度解析为TimeSpan,然后简单地将2加在一起,如下所示:

using System;

namespace TimeParser {
    class Program {
        static TimeSpan GetTimeFromText( string text ) {
            if ( string.IsNullOrWhiteSpace( text ) ) {
                return TimeSpan.Zero;
            }
            return TimeSpan.Parse( text );
        }

        static TimeSpan GetTimeFromDouble( double value ) {
            if ( value <= 0 ) {
                return TimeSpan.Zero;
            }
            int hours = (int)Math.Floor( value );
            int minutes = (int)(( value - hours )*60);
            return new TimeSpan(0, hours, minutes, 0);
        }

        static TimeSpan GetAddedTime( string input, double time ) {
            var textTime = GetTimeFromText( input );
            return textTime.Add( GetTimeFromDouble( time ) );
        } 

        static void Main( string[] args ) {
            var totalTime = GetAddedTime( "8:30", 8.67 );
            Console.WriteLine( totalTime ); // 17.10
        }
    }
}