2014-10-03 41 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没有问题。

相关问题