2017-03-02 47 views
2

enter image description here我想要查找兩個DateTime值之間的總天數。所以,我創建了執行減法totaldays:將TimeSpan值舍入爲第一個整數

TimeSpan totaldays = enddatedata - startdatedata; 

我想時間跨度四捨五入到第一整數例如13,而不是13:00:00:00我要值13添加到數據庫。出於測試目的,我正在使用標籤來顯示結果:

lbltotaldays.Text = (totaldays.ToString()); 

如何將值舍入爲僅第一個數字?

protected void insertbutton_Click(object sender, EventArgs e) 
    { 

     int? recurrencedata = Convert.ToInt32(ddlRecurrence.Text); 
     if (recurrencedata == 1) 
     { 
      int moduledata = Convert.ToInt32(ddlModule.Text); 
      DateTime startdatedata = Convert.ToDateTime(txtstartdate.Text); 
      DateTime enddatedata = Convert.ToDateTime(txtenddate.Text); 
      int classtypedata = Convert.ToInt32(ddlClassType.Text); 
      int roomcodedata = Convert.ToInt32(ddlRoomCode.Text); 
      int starttimedata = Convert.ToInt32(ddlStartClassTime.Text); 
      int endtimedata = Convert.ToInt32(ddlEndClassTime.Text); 

      startdatedata = DateTime.Parse(txtstartdate.Text).Date; 
      enddatedata = DateTime.Parse(txtenddate.Text).Date; 
      TimeSpan totaldays = enddatedata - startdatedata; 

      string DefaultConnection = WebConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString; 
      SqlConnection myConnection = new SqlConnection(DefaultConnection); 

      myConnection.Open(); 

      string query = "INSERT INTO Class (ModuleId, ClassTypeId, ClassScheduleStartTimeId, ClassScheduleEndTimeId, RoomCodeId, StartTime, EndTime, RecurrenceId, TotalDayNumber) VALUES (@moduledata, @classtypedata, @starttimedata, @endtimedata, @roomcodedata, @startdatedata, @enddatedata, @recurrencedata, @totaldaynumberdata)"; 

      SqlCommand myCommand = new SqlCommand(query, myConnection); 
      myCommand.Parameters.AddWithValue("@moduledata", moduledata); 
      myCommand.Parameters.AddWithValue("@classtypedata", classtypedata); 
      myCommand.Parameters.AddWithValue("@startdatedata", startdatedata); 
      myCommand.Parameters.AddWithValue("@enddatedata", enddatedata); 
      myCommand.Parameters.AddWithValue("@starttimedata", starttimedata); 
      myCommand.Parameters.AddWithValue("@roomcodedata", roomcodedata); 
      myCommand.Parameters.AddWithValue("@endtimedata", endtimedata); 
      myCommand.Parameters.AddWithValue("@recurrencedata", recurrencedata); 
      myCommand.Parameters.AddWithValue("@totaldaynumberdata", totaldays); 
      myCommand.ExecuteNonQuery(); 
      myConnection.Close(); 

      SuccessPanel.Visible = true; 
      lbltotaldays.Text = (totaldays.ToString()); 
     } 
    } 
} 
+1

TimeSpan.TotalDays是在整數和分數天時間跨度的雙重價值。您可以使用Math.Round將其四捨五入爲整數。 – Joe

+0

謝謝你能提供一個與我的代碼上下文的例子嗎?非常感謝 –

+0

您看到的問題與您所傳遞的內容無關:有問題的字段是數據庫類型「time」,並且它會被溢出,因爲您將時間跨度設置爲14天; DB時間可能需要最多23:59:59的時間跨度。 – dasblinkenlight

回答

1

如果你正在尋找從TimeSpan得到充分的天數,使用其Days屬性:

lbltotaldays.Text = totaldays.Days.ToString(); 

這會忽略的小時數,所以,例如13天22小時5分鐘將產生13

如果你想治療13½天爲14,調用Math.RoundTotalDays屬性:

lbltotaldays.Text = ((int)Math.Round(totaldays.TotalDays, MidpointRounding.AwayFromZero)).ToString(); 
+0

謝謝。我敢肯定,這在標籤中顯示時會起作用,但標籤只是爲了測試它將顯示的值。我想實際上插入的值,例如13到數據庫列'TotalDayNumber'設置爲一個int –

+0

@DavidCraven跳過'ToString'然後 - 即使用'(int)Math.Round(totaldays.TotalDays)'或' (int)totaldays.Days',取決於你是否需要四捨五入。 – dasblinkenlight

+0

請注意,Math.Round的默認值是使用銀行家的舍入,因此12.5被舍入爲12.我想你忘了指定舍入方法,如'Math.Round(totaldays.TotalDays,MidpointRounding.AwayFromZero)'。或者'Math.Ceiling'可能是合適的。 –