Col*_*nic 84 .net c# time timespan date
如何在C#中乘以TimeSpan对象?假设变量duration是TimeSpan,我想,例如
duration*5
Run Code Online (Sandbox Code Playgroud)
但这给了我一个错误"operator*不能应用于类型TimeSpan和int".这是我目前的解决方法
duration+duration+duration+duration+duration
Run Code Online (Sandbox Code Playgroud)
但这并没有扩展到非整数倍,例如. duration * 3.5
Jus*_*ony 101
TimeSpan duration = TimeSpan.FromMinutes(1);
duration = TimeSpan.FromTicks(duration.Ticks * 12);
Console.WriteLine(duration);
Run Code Online (Sandbox Code Playgroud)
Ste*_*ett 43
对于那些希望复制和粘贴的人:
namespace Utility
{
public static class TimeSpanExtension
{
/// <summary>
/// Multiplies a timespan by an integer value
/// </summary>
public static TimeSpan Multiply(this TimeSpan multiplicand, int multiplier)
{
return TimeSpan.FromTicks(multiplicand.Ticks * multiplier);
}
/// <summary>
/// Multiplies a timespan by a double value
/// </summary>
public static TimeSpan Multiply(this TimeSpan multiplicand, double multiplier)
{
return TimeSpan.FromTicks((long)(multiplicand.Ticks * multiplier));
}
}
}
Run Code Online (Sandbox Code Playgroud)
用法示例:
using Utility;
private static void Example()
{
TimeSpan t = TimeSpan.FromSeconds(30).Multiply(5);
}
Run Code Online (Sandbox Code Playgroud)
t 结束时间为150秒.
Ken*_*art 12
该TimeSpan结构不会给*操作员带来过载,因此您必须自己完成:
var result = TimeSpan.FromTicks(duration.Ticks * 5);
Run Code Online (Sandbox Code Playgroud)
TimeSpan.Multiply 已经出现在 .NET Core 中,看起来它会出现在 .NET Standard 2.1 中:
https://docs.microsoft.com/en-us/dotnet/api/system.timespan.op_multiply?view=netstandard-2.1
var result = 3.0 * TimeSpan.FromSeconds(3);
Run Code Online (Sandbox Code Playgroud)
但仅适用于.NET Core和.NET Standard。
从.NET Core 2.0(或.NET Standard 2.1)开始,您可以成功运行以下代码:
Console.WriteLine(TimeSpan.FromSeconds(45) * 3);
// Prints:
// 00:02:15
Run Code Online (Sandbox Code Playgroud)
然而,重要的是要注意(如文档中所述)这仅适用于.NET Core 2.0 + 和.NET Standard 2.1 +。
截至今天(2019 年 11 月 26 日),即使在最新的.NET Framework版本中,上述代码也会失败:4.8。
如果您在控制台应用程序中尝试上述代码,例如,运行.NET Core 1.1或更低版本,或.NET Framework 4.8或更低版本,您将抛出以下异常:
Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: 'Operator '*' 不能应用于类型为 'System.TimeSpan' 和 'int'' 的操作数
为了理解为什么在地球上,我们不能在.NET框架使用上面的代码,它是启发看到什么IMMO说:
.NET Core是.NET的开源、跨平台和快速发展的版本。由于它的并行特性,它可以进行我们不能冒险应用回 .NET Framework 的更改。这意味着 .NET Core 将随着时间的推移获得 .NET Framework 无法获得的新 API 和语言功能。在 Build 中,我们展示了文件 API 如何在 .NET Core 上更快的演示。如果我们将这些相同的更改放入 .NET Framework 中,我们可能会破坏现有的应用程序,而我们不想这样做。
您可以使用 TimeSpan 的内部数据,即刻度。
TimeSpan day = TimeSpan.FromDays(1);
TimeSpan week = TimeSpan.FromTicks(day.Ticks * 7);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
22853 次 |
| 最近记录: |