【问题标题】:Calculating time by concatenating multiple time related dropdown lists通过连接多个与时间相关的下拉列表来计算时间
【发布时间】:2017-10-06 18:49:53
【问题描述】:

所以我有 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 连接在一起,然后显示所用时间。

【问题讨论】:

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

标签: c#


【解决方案1】:

我认为最简单的方法是通过组合 3 个下拉菜单来获取 DateTime 值,您可以执行类似的操作

DateTime time = DateTime.Today.AddHours(ddHours.SelectedValue).AddMinutes(ddMins.SelectedValue);
if (ddTimeOfDay.SelectedValue == "PM") time.AddHours(12);

然后对另一组 3 个下拉菜单重复此操作。找出差异:

TimeSpan diff = timeFinish - timeStart;

【讨论】:

    【解决方案2】:

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

    var DDLStart_Hour = // start hours dropdown value
    var DDLStart_Minute = // start minute dropdown value
    var DDLStart_Tt = // start AM/PM dropdown value
    
    var DDLEnd_Hour = // end hours dropdown value
    var DDLEnd_Minute = // end minute dropdown value
    var DDLEnd_Tt = // end AM/PM dropdown value
    
    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 elapsed = end - start; // TimeSpan
    

    【讨论】:

      猜你喜欢
      • 2018-02-26
      • 1970-01-01
      • 2015-01-22
      • 1970-01-01
      • 2023-03-03
      • 1970-01-01
      • 2014-05-19
      • 1970-01-01
      • 2015-07-28
      相关资源
      最近更新 更多