C# 将TimeSpan值舍入为第一个整数
我想找出两个日期时间值之间的总天数。因此,我创建了totaldays来执行减法:C# 将TimeSpan值舍入为第一个整数,c#,date,timespan,C#,Date,Timespan,我想找出两个日期时间值之间的总天数。因此,我创建了totaldays来执行减法: TimeSpan totaldays = enddatedata - startdatedata; 我想将时间跨度四舍五入到第一个整数,例如13,而不是13:00:00:00,因为我想将值13添加到数据库中。出于测试目的,我使用标签显示结果: lbltotaldays.Text = (totaldays.ToString()); 如何将值四舍五入到第一个数字 protected void insertb
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());
}
}
}
如果您希望从
TimeSpan
获取完整天数,请使用其days
属性:
lbltotaldays.Text = totaldays.Days.ToString();
lbltotaldays.Text = ((int)Math.Round(totaldays.TotalDays, MidpointRounding.AwayFromZero)).ToString();
这将忽略小时数,因此,例如,13天22小时5分钟将产生13
如果您想将13½天视为14天,请致电酒店的Math.Round
:
lbltotaldays.Text = totaldays.Days.ToString();
lbltotaldays.Text = ((int)Math.Round(totaldays.TotalDays, MidpointRounding.AwayFromZero)).ToString();
TimeSpan.TotalDays是一个双倍值,TimeSpan以整天和分数天表示。您可以使用Math.round将其舍入为整数。谢谢,您能在我的代码上下文中提供一个示例吗?非常感谢您看到的问题与您传递的内容无关:有问题的字段是DB type
time
,它会溢出,因为您将时间跨度设置为14天;DB时间最多需要23:59:59的时间跨度。谢谢。我确信当在标签中显示它时,这是有效的,但是标签只是为了测试它将显示什么值。我想实际将值(例如13)插入数据库列“TotalDayNumber”,该列设置为int@DavidCraven跳过ToString
,然后-即使用(int)Math.Round(totaldays.totaldays)
或(int)totaldays.Days
,取决于是否需要舍入。请注意,Math.Round的默认值是使用银行家舍入,因此12.5被舍入为12。我想您忘了指定舍入方法,比如Math.Round(totaldays.totaldays,MidpointRounding.AwayFromZero)
。或者Math.Ceiling
可能是合适的。