有没有办法将多个聚合聚合到一个时间跨度?
Dim times = {
New TimeSpan(1, 0, 0),
New TimeSpan(1, 10, 0),
New TimeSpan(1, 50, 0),
New TimeSpan(0, 20, 0),
New TimeSpan(0, 10, 0)
}
Dim sum As New TimeSpan
For Each ts In times
sum = sum.Add(ts)
Next
'That's what I desire:
sum = times.Sum
sum = times.Aggregate
Run Code Online (Sandbox Code Playgroud)
我正在寻找一些我不知道的内置功能.
更新 请阅读我对Reed Copsey答案的评论.
举个例子:
我们需要计算音频专辑播放进度条的子部分的大小.专辑中的每个曲目的长度都表示为TimeSpan值.专辑的总长度也是TimeSpan.
我需要计算每张曲目与整张专辑相比有多长的重量,所以我可以分别在进度条上绘制它.
我知道不可能将两个TimeSpan变量分开,所以我试图划分.Ticks.
long coeff = curTrackLength.Ticks / _totalLength.Ticks;
Run Code Online (Sandbox Code Playgroud)
这样的划分总是导致0.我需要更精确的值.如何实现更精确的计算?
环境是适用于Windows Phone Mango的Silverlight.
我在c#MVC2项目中有以下代码行:
string.Format(@"{0\:HH\:mm}", new TimeSpan(0))
Run Code Online (Sandbox Code Playgroud)
此行导致以下异常:
System.FormatException: Input string was not in a correct format.
Run Code Online (Sandbox Code Playgroud)
谁能告诉我为什么?我正在使用C#,asp.net,mvc2和.net framework 4
假设夜间时间设定为20.30h至6.15h(AM).这两个参数是用户范围的变量.假设您的到达日期和出发日期可以从几分钟到一天以上.你如何计算夜晚的总小时数?
public static double CalculateTotalNightTimeHours(DateTime arrival,
DateTime departure,
int nightTimeStartHour,
int nightTimeStartMinute,
int nightTimeEndHour,
int nightTimeEndMinute)
{
//??
}
Run Code Online (Sandbox Code Playgroud)
编辑:我明白这可能不是直接的肯定/没有答案,但也许有人有一个优雅的解决方案来解决这个问题.回答评论:我确实想要计算用户可编辑的夜间开始和结束时间之间的总小时数(或分钟数).我正在计算访问时间,第一个日期确实是到达参数.
我的代码是:
DateTime nightStart = new DateTime( departure.Year, departure.Month, departure.Day,
nightTimeStartHour, nightTimeStartMinute, 0);
DateTime nightEnd = new DateTime( arrival.Year, arrival.Month, arrival.Day,
nightTimeEndHour, nightTimeEndMinute, 0);
if (arrival < nightEnd)
{
decimal totalHoursNight = (decimal)nightEnd.Subtract(arrival).TotalHours;
}
//...
Run Code Online (Sandbox Code Playgroud) 我在文档中找不到任何解释此方法细节的内容.因为它总是返回一个整数,所以它不区分3:20的时差和3:10的时差.但它是向上舍入还是向下舍入,还是只比较2倍的小时部分?
示例:OpenTime = 2014-06-12 13:35:00.000 CloseTime = 2014-06-13 14:30:00.000
实际差异是24小时55分钟.这会返回24小时或25小时的差异吗?
我需要确定2次是否相隔25小时或更长时间; 我可以使用DiffHours,还是需要使用DiffSeconds并将结果除以3600以获得实际小时数?
我尝试将字符串转换为时间跨度,但我得到以下异常:
输入字符串的格式不正确.
我的代码:
rad_from_time.SelectedTime = TimeSpan.Parse(pro[0].FromTime)
Run Code Online (Sandbox Code Playgroud)
pro[0].FromTime = "9:30 AM";
Run Code Online (Sandbox Code Playgroud) 我想在DateTime中添加新的时间值
我在Watch中的代码:
tsStart {09:00:00} System.TimeSpan
StartDateTime {10/17/2014 12:00:00 AM} System.DateTime
Run Code Online (Sandbox Code Playgroud)
用于将TimeSpan添加到DateTime的c#代码:
StartDateTime.Add(tsStart);
Run Code Online (Sandbox Code Playgroud)
添加后Watch中的值
StartDateTime {10/17/2014 12:00:00 AM} System.DateTime
Run Code Online (Sandbox Code Playgroud)
我做错了什么?
在我的RDLC报告中,我显示了员工的工作时间.
我想总结一下每个员工的时间.我使用可空的timeSpan类型返回记录集中的工作时间,并在报告中将它们格式化为hh:mm,如下所示:
7:30
4:45
5:30
7:30
7:30
Run Code Online (Sandbox Code Playgroud)
已经有大约在同一问题提出许多其他问题,比如这个, 这个,但没有似乎有一个可以接受的答案.
这个问题几乎就是我想要的.除了显示日,小时,分钟,秒.
但是我的用户只想要总小时和分钟,没有天,即在这种情况下我希望看到32小时45分钟.
7:30
4:45
5:30
7:30
7:30
---------
Total: 32:45
Run Code Online (Sandbox Code Playgroud)
我尝试了以下公式,但我得到了#error:
=TimeSpan.FromMinutes(Sum(Fields!Hours.Value))
Run Code Online (Sandbox Code Playgroud)
而且:
=Sum(Fields!Hours.Value)
Run Code Online (Sandbox Code Playgroud)
这个给了我几天,几小时,几分钟......所以很接近,但我只需要总数......:
=TimeSpan.FromTicks(Sum(Fields!Hours.Value))
Run Code Online (Sandbox Code Playgroud)
这可能吗 ?
我想将分钟转换为秒,此刻我遇到了问题,因为在分钟文本框中,当我输入1.50时,结果为90秒,这是错误的,因为1.30 = 90秒
private void MtoCbutton_Click(object sender, EventArgs e)
{
if (minTosecTextBox.Text != "Minutes")
{
minutes = Convert.ToDouble(minTosecTextBox.Text);
TimeSpan span = TimeSpan.FromMinutes(minutes);
resultSectextBoxtextBox.Text = span.TotalSeconds.ToString();
}
else
{
MessageBox.Show("Please enter Minutes");
}
Run Code Online (Sandbox Code Playgroud) 在PowerShell中,是否可以将ISO 8601指定的持续时间转换为 DateTime对象?例如,PT30M是30分钟前,所以如果现在是2019-07-31 17:00:00我想要的时间戳记2019-07-31 16:30:00。
我已经尝试过显而易见的-
"PT30M" | Get-Date
Run Code Online (Sandbox Code Playgroud)
但这(毫不奇怪地失败了)
Get-Date:输入对象不能绑定到该命令的任何参数,因为该命令不接受管道输入,或者该输入及其属性与接受管道输入的任何参数都不匹配。
我的下一个想法是编写一个将提取天,小时和分钟的函数(例如,最多最多30天)。为此,下面的函数可以$startTime根据$Duration传入的内容工作并创建。
但是,感觉有点不对劲。首先,正则表达式只非常具体地检查几天,几分钟和几小时,而其余的$Duration可能完全是垃圾。其次,一旦考虑到诸如秒,周和月之类的事情,那将很麻烦。
是否有内置的方法来执行此操作,还是在最佳选项下坚持使用该功能?
function Get-TimespanFromDuration
{
param(
[Parameter(Mandatory)]
[string]$Duration
)
$now = (Get-Date).ToUniversalTime()
$dataTimeAgo = @{ "Days" = 0; "Hours" = 0; "Minutes" = 0 }
### Work out how may days ago.
$daysAgo = $Duration -match "\D([1-9]|[1-2][0-9]|30)D"
if ($daysAgo)
{
[int]$dataTimeAgo["Days"] = $matches[0] -replace "\D+"
}
### Work out how may …Run Code Online (Sandbox Code Playgroud)