我想编写一个代码,用于读取用户写入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。任何帮助表示赞赏
谢谢你们答案 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);
}
显然,如果您希望用户也设置日期,只需将MinValue
和MaxValue
限制更改为您的要求(如果有),并选择一个预定义的格式选项而不是{{ 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
}
}
}