【发布时间】: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#