2014-10-03 43 views
0

我有一個12小時制時鐘,它可以計算兩次小數點之間的差值。它貫穿下面的循環,但在測試後,我看到當我在12:00到12:59(AM或PM)之間輸入時間時,它發佈了完全錯誤的時間。問題是第12個小時是特殊情況,不需要增加或減少12個小時。我該如何解決這個問題,以便用十進制發佈正確的時間?12小時制,12小時制十進制

另外,因爲我發佈這個我有另一個問題;我怎樣才能輕鬆地計算出十進制的總時間?

下面是GUI的圖片,以便您瞭解我們正在處理的內容。 http://imgur.com/y7JezcC

protected void CalculateButton_Click(object sender, EventArgs e) 
{ 
    //Initializing 
    TextBox[] textboxesIn = new TextBox[7]; 
    TextBox[] textboxesOut = new TextBox[7]; 
    DropDownList[] dropdownIn = new DropDownList[7]; 
    DropDownList[] dropdownOut = new DropDownList[7]; 
    Label[] labels = new Label[7]; 

    //Week 1 in textboxes 
    textboxesIn[0] = MondayW1InTextBox; 
    textboxesIn[1] = TuesdayW1InTextBox; 
    textboxesIn[2] = WednesdayW1InTextBox; 
    textboxesIn[3] = ThursdayW1InTextBox; 
    textboxesIn[4] = FridayW1InTextBox; 
    textboxesIn[5] = SaturdayW1InTextBox; 
    textboxesIn[6] = SundayW1InTextBox; 

    //Week 1 out textboxes 
    textboxesOut[0] = MondayW1OutTextBox; 
    textboxesOut[1] = TuesdayW1OutTextBox; 
    textboxesOut[2] = WednesdayW1OutTextBox; 
    textboxesOut[3] = ThursdayW1OutTextBox; 
    textboxesOut[4] = FridayW1OutTextBox; 
    textboxesOut[5] = SaturdayW1OutTextBox; 
    textboxesOut[6] = SundayW1OutTextBox; 

    //Week 1 in drop down list 
    dropdownIn[0] = MondayW1InDropDown; 
    dropdownIn[1] = TuesdayW1InDropDown; 
    dropdownIn[2] = WednesdayW1InDropDown; 
    dropdownIn[3] = ThursdayW1InDropDown; 
    dropdownIn[4] = FridayW1InDropDown; 
    dropdownIn[5] = SaturdayW1InDropDown; 
    dropdownIn[6] = SundayW1InDropDown; 

    //Week 1 out drop down list 
    dropdownOut[0] = MondayW1OutDropDown; 
    dropdownOut[1] = TuesdayW1OutDropDown; 
    dropdownOut[2] = WednesdayW1OutDropDown; 
    dropdownOut[3] = ThursdayW1OutDropDown; 
    dropdownOut[4] = FridayW1OutDropDown; 
    dropdownOut[5] = SaturdayW1OutDropDown; 
    dropdownOut[6] = SundayW1OutDropDown; 

    //Week 1 labels 
    labels[0] = MondayW1Label; 
    labels[1] = TuesdayW1Label; 
    labels[2] = WednesdayW1Label; 
    labels[3] = ThursdayW1Label; 
    labels[4] = FridayW1Label; 
    labels[5] = SaturdayW1Label; 
    labels[6] = SundayW1Label; 

    for (int i = 0; i < 7; i++) 
    { 
     DateTime dt = DateTime.ParseExact(textboxesIn[i].Text.PadLeft(4, '0'), "HHmm", CultureInfo.InvariantCulture); 
     string timestring = dt.ToString("h:mm"); 
     labels[i].Text = timestring; 

     DateTime timeIn = DateTime.ParseExact(textboxesIn[i].Text.PadLeft(4, '0'), "HHmm", CultureInfo.InvariantCulture); 
     DateTime timeOut = DateTime.ParseExact(textboxesOut[i].Text.PadLeft(4, '0'), "HHmm", CultureInfo.InvariantCulture); 

     if (dropdownIn[i].SelectedValue == "PM") 
     { 
      timeIn = timeIn.AddHours(12); 
     } 

     if (dropdownOut[i].SelectedValue == "PM") 
     { 
      timeOut = timeOut.AddHours(12); 
     } 
     labels[i].Text = (timeOut - timeIn).TotalHours.ToString("f2"); 
    } 
} 
+0

爲什麼不把AM/PM添加到時間字符串並使用格式「HHmm tt」 – 2014-10-03 18:44:32

回答

0

在任何情況下,當你寫1到11,這將是默認AM,你可以總結12個HS,但是當你寫12始終將PM(上午將是00),所以, :

1PM + 12 = 13

2PM + 12 = 14

..

11PM + 12 = 23

//現在您的奇怪結果:

12:45(PM)+ 12 = 24:45 => 00:45,但在一天後

3:00(PM)+ 12 = 15

15小時(第0天) - 00:45(第1天)是您的負面結果。

一個簡單的方法是休息12小時12時的情況。

for (int i = 0; i < 7; i++) 
    { 
     DateTime dt = DateTime.ParseExact(textboxesIn[i].Text.PadLeft(4, '0'), "HHmm", CultureInfo.InvariantCulture); 
     string timestring = dt.ToString("h:mm"); 
     labels[i].Text = timestring; 

     DateTime timeIn = DateTime.ParseExact(textboxesIn[i].Text.PadLeft(4, '0'), "HHmm", CultureInfo.InvariantCulture); 
     DateTime timeOut = DateTime.ParseExact(textboxesOut[i].Text.PadLeft(4, '0'), "HHmm", CultureInfo.InvariantCulture); 

     if(timeIn.Hour == 12) timeIn = timeIn.AddHours(-12); //a easy way 

     if (dropdownIn[i].SelectedValue == "PM") 
     { 
      timeIn = timeIn.AddHours(12); 
     } 

     if (dropdownOut[i].SelectedValue == "PM") 
     { 
      timeOut = timeOut.AddHours(12); 
     } 
     labels[i].Text = (timeOut - timeIn).TotalHours.ToString("f2"); 
    } 
2

嘗試

DateTime timeIn = DateTime.ParseExact(textboxesIn[i].Text.PadLeft(4, '0') + dropdownIn[i].SelectedValue.Text, "hhmm tt", CultureInfo.InvariantCulture); 

你必須改變HH HH來,因爲你不能解析到中午12點HH。 之後,你可以timeOut - timeIn沒有問題。

相關問題