2017-03-02 14 views
2

enter image description here 2つのDateTime値の間の合計日数を求めます。私は、データベースに値13を追加したいと00:00:00私は最初の全体数の例えば13の代わりに、13までのTimeSpanを四捨五入したいTimeSpan値を最初の整数に丸める

TimeSpan totaldays = enddatedata - startdatedata; 

:だから私は、減算を実行totaldaysを作成しました。テスト目的のために、私は結果を表示するためにラベルを使用しています:

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

最初の数値だけに値を丸める方法はありますか? 13日22時間、例えば、これは時間数を無視します

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

、そう:あなたはTimeSpanからフルの日数を取得するために探している場合

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

あなたが見ている問題は、あなたが渡しているものとは何の関係もありません。問題のあるフィールドはDBタイプの 'time'であり、14日間のタイムスパンを設定しているのでオーバーフローします; DB時間には、23:59:59までの時間がかかります。 – dasblinkenlight

答えて

1

は、そのDaysプロパティを使用します5分で13が生成されます。

あなたはTotalDays性質上Math.Roundを呼び出して、14として13½日間治療したい場合

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

ありがとうございます。私はこれがラベルに表示するときに機能すると確信していますが、ラベルは表示される値をテストするだけでした。私は実際に値を挿入したいと思います。たとえば、13をデータベース列 'TotalDayNumber'に挿入して、 –

+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'が適切かもしれません。 –

関連する問題