Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过连接多个与时间相关的下拉列表来计算时间_C# - Fatal编程技术网

C# 通过连接多个与时间相关的下拉列表来计算时间

C# 通过连接多个与时间相关的下拉列表来计算时间,c#,C#,所以我有6个下拉列表来存储时间值 Start time DDL Hour - 01, 02, 03,..., 10, 11, 12 DDL Minutes - 00, 15, 30, 45 DDL TimeofDay - AM, PM Finish Time Same values 我在寻找一种方法,根据索引的变化,计算从开始到结束所花费的时间 有没有办法用我拥有的下拉列表的数量来做到这一点?我见过几个例子,人们使用1个下拉列表作为开始,1个下拉列表作为结束。如果所有其他方法都失败了,我可以

所以我有6个下拉列表来存储时间值

Start time
DDL Hour - 01, 02, 03,..., 10, 11, 12
DDL Minutes - 00, 15, 30, 45
DDL TimeofDay - AM, PM

Finish Time
Same values
我在寻找一种方法,根据索引的变化,计算从开始到结束所花费的时间


有没有办法用我拥有的下拉列表的数量来做到这一点?我见过几个例子,人们使用1个下拉列表作为开始,1个下拉列表作为结束。如果所有其他方法都失败了,我可以这样做,但我希望有一种方法可以将3个连接在一起,然后显示所花费的时间。

我认为最简单的方法是通过组合3个下拉列表来获得日期时间值,您可以执行以下操作

DateTime time = DateTime.Today.AddHours(ddHours.SelectedValue).AddMinutes(ddMins.SelectedValue);
if (ddTimeOfDay.SelectedValue == "PM") time.AddHours(12);
然后对另一组3个下拉列表重复此操作。要找出差异,请执行以下操作:

TimeSpan diff = timeFinish - timeStart;

我认为最简单的方法是通过组合3个下拉列表获得DateTime值,您可以执行以下操作

DateTime time = DateTime.Today.AddHours(ddHours.SelectedValue).AddMinutes(ddMins.SelectedValue);
if (ddTimeOfDay.SelectedValue == "PM") time.AddHours(12);
然后对另一组3个下拉列表重复此操作。要找出差异,请执行以下操作:

TimeSpan diff = timeFinish - timeStart;

如果您有文本值,您可以将所有内容组合起来,一次解析所有内容:

var DDLStart\u Hour=//开始时数下拉列表值
var DDLStart_Minute=//开始分钟下拉值
var DDLStart\u Tt=//开始AM/PM下拉值
var DDLEnd_Hour=//结束小时下拉值
var DDLEnd_Minute=//结束分钟下拉值
var DDLEnd_Tt=//结束AM/PM下拉值
var now=DateTime.now;
var start=DateTime.Parse($“{now.Month}/{now.Day}/{now.Year}{DDLStart_Hour}:{DDLStart_Minute}:00{DDLStart_Tt}”);
var end=DateTime.Parse($“{now.Month}/{now.Day}/{now.Year}{DDLEnd_Hour}:{DDLEnd_Minute}:00{DDLEnd_Tt}”);
var经过=结束-开始;//时间跨度

如果您有文本值,您可以将所有内容组合起来,一次解析所有内容:

var DDLStart\u Hour=//开始时数下拉列表值
var DDLStart_Minute=//开始分钟下拉值
var DDLStart\u Tt=//开始AM/PM下拉值
var DDLEnd_Hour=//结束小时下拉值
var DDLEnd_Minute=//结束分钟下拉值
var DDLEnd_Tt=//结束AM/PM下拉值
var now=DateTime.now;
var start=DateTime.Parse($“{now.Month}/{now.Day}/{now.Year}{DDLStart_Hour}:{DDLStart_Minute}:00{DDLStart_Tt}”);
var end=DateTime.Parse($“{now.Month}/{now.Day}/{now.Year}{DDLEnd_Hour}:{DDLEnd_Minute}:00{DDLEnd_Tt}”);
var经过=结束-开始;//时间跨度

我认为您需要做的是创建一个表示开始时间的DateTime,如果您在DateTime上查找MSDN文档,这是很简单的。然后你会对完成时间做同样的事情,然后从另一个中减去一个。您可能希望编写一个方法来完成所有这些,并且希望从所有下拉列表的index changed事件调用该方法。我会对它们使用相同的事件处理程序方法。这将涉及到编写代码,但有些人整天都这样做,但在其他方面却过着某种有意义的生活。加上Ed所说的:从另一个日期时间中减去一个日期时间会给你一个
TimeSpan
值。如果您有这些
TimeSpan
s的列表,那么您可以通过调用
.Aggregate((t1,t2)=>t1+t2)
对它们进行求和(这就是我认为您所说的“连接”),谢谢Ed。我没有写代码的问题。只是想知道如何组合这些值。我将考虑创建一个日期时间,因为我也有一个日历需要进入其中。如果没有与您的时间关联的特定日期,您可能实际上希望首先从
TimeSpan
s开始,而不是从
DateTime
s开始<代码>新时间跨度(小时,分钟,0),其中小时设置为小时或小时+12,具体取决于上午/下午。@NightOwl888:是这样的。从技术上讲,如果有人的开始时间是1h30,结束时间是2h30,那么我的方法总是表明会议是一个小时。Akerra的方法表明,除非当前日期是异常的一天,如当前时区进入或退出DST,否则这一天将持续一小时。如果有一个特定的日期与这些开始时间和结束时间相关联,那么你可以更具体一些,但是如果没有,那么我认为没有比使用时间跨度更正确的方法来计算持续时间。我认为你要做的是创建一个表示开始时间的日期时间,如果您在DateTime上查找MSDN文档,这一点很简单。然后你会对完成时间做同样的事情,然后从另一个中减去一个。您可能希望编写一个方法来完成所有这些,并且希望从所有下拉列表的index changed事件调用该方法。我会对它们使用相同的事件处理程序方法。这将涉及到编写代码,但有些人整天都这样做,但在其他方面却过着某种有意义的生活。加上Ed所说的:从另一个日期时间中减去一个日期时间会给你一个
TimeSpan
值。如果您有这些
TimeSpan
s的列表,那么您可以通过调用
.Aggregate((t1,t2)=>t1+t2)
对它们进行求和(这就是我认为您所说的“连接”),谢谢Ed。我没有写代码的问题。只是想知道如何组合这些值。我将考虑创建一个日期时间,因为我也有一个日历需要进入其中。如果没有与您的时间关联的特定日期,您可能实际上希望首先从
TimeSpan
s开始,而不是从
DateTime
s开始<代码>新时间跨度(小时,分钟,0),其中小时设置为小时或小时+12,具体取决于上午/下午。@NightOwl888:是这样的。从技术上讲,如果有人的开始时间是1h30,结束时间是2h30,那么我的方法总是表明会议是一个小时。Akerra的方法表明,除非当前日期是异常的一天,如当前时区进入或退出DST,否则这一天将持续一小时。如果有一个特定的日期与这些开始和结束时间相关联,那么你可以更具体,但是如果没有,那么我认为没有比使用更正确的方法来计算持续时间