2016-08-25 64 views
1

我想寫一段代碼,讀取用戶在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。任何幫助表示讚賞

感謝你們

回答

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限制你的要求(如果有的話),並選擇其中一個預定義的格式選項而不是DateTimePickerFormat.Custom

1

試試這個:

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

你可以用它代替雙日期時間。

private void button1_Click(object sender, EventArgs e) 
    { 
     DateTime dateTime = DateTime.ParseExact(textBox1.Text, "HH:mm", System.Globalization.CultureInfo.CurrentCulture); 
     TimeSpan time = new TimeSpan(8,40,0); 
     DateTime outputTime = dateTime.Add(time); 
     textBox2.Text = outputTime.ToString("HH:mm"); 
    } 
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

0

如果你真的想用double來做,你必須考慮從幾分鐘到整數的轉換。 8.4將是60 * .4 = 24分鐘。

對於剩下的,文本字符串可以解析使用TimeSpan.Parse,你可以寫,將解析雙到時間跨度,然後只需添加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 
     } 
    } 
} 
相關問題