C# 如何在不设置格式的情况下返回TimeSpan?
执行上述行后,C# 如何在不设置格式的情况下返回TimeSpan?,c#,formatting,timespan,C#,Formatting,Timespan,执行上述行后,timeSpan的值通常格式为12:10:10 是否有可能将值设置为10:130:10(即无格式)?在紧急情况下我需要它。我不相信在定义了TimeSpan构造函数之后,你会得到10:130:10。没有理由保留它们,因为我们都知道,10小时+130分钟+10秒等于12:10:10。它是一个时间间隔,不单独保留时间组件 来自 指定的小时、分钟和秒将转换为刻度,和 该值初始化此实例 让我们看看这个构造函数是如何定义的 var timeSpan = new TimeSpan(10,130,
timeSpan
的值通常格式为12:10:10
是否有可能将值设置为
10:130:10
(即无格式)?在紧急情况下我需要它。我不相信在定义了TimeSpan
构造函数之后,你会得到10:130:10
。没有理由保留它们,因为我们都知道,10小时+130分钟+10秒等于12:10:10
。它是一个时间间隔,不单独保留时间组件
来自
指定的小时、分钟和秒将转换为刻度,和
该值初始化此实例
让我们看看这个构造函数是如何定义的
var timeSpan = new TimeSpan(10,130,10);
这就是TimeToTicks
方法的实现方式
public TimeSpan(int hours, int minutes, int seconds)
{
_ticks = TimeToTicks(hours, minutes, seconds);
}
内部静态长时间时钟(整数小时、整数分钟、整数秒)
{
长总秒=(长)小时*3600+(长)分*60+(长)秒;
如果(totalSeconds>MaxSeconds | | totalSeconds
如您所见,此方法不保留构造函数参数(
hours
、minute
或second
)。它只是从hours*3600+minute*60+second
值计算totalseconds
。TimeSpan
不是这样工作的。它表示经过的持续时间,而不是单个时间组件。有关更多详细信息,请参阅
如果你想保持“10小时,130分钟,10秒”作为单独的信息,那么你应该考虑。作为一个字符串,该值看起来像“PT10H130M10S”
在.NET中,您可以使用库中的Period
类型来处理这些类型的值
要创建单个零件周期,您可以利用简单的工厂方法,如period.FromMonths(3)
。但要创建多部分期间,您需要执行以下方法之一:
- 您可以使用
从各个变量构建周期:PeriodBuilder
internal static long TimeToTicks(int hour, int minute, int second) { long totalSeconds = (long)hour * 3600 + (long)minute * 60 + (long)second; if (totalSeconds > MaxSeconds || totalSeconds < MinSeconds) throw new ArgumentOutOfRangeException(null, Environment.GetResourceString("Overflow_TimeSpanTooLong")); return totalSeconds * TicksPerSecond; }
- 您可以使用
解析ISO-8601持续时间字符串中的句点。特别是,下图所示的PeriodPattern
将保持零件与最初提供的零件完全相同:RoundtripPattern
PeriodBuilder builder = new PeriodBuilder(); builder.Hours = 10; builder.Minutes = 130; builder.Seconds = 10; Period period = builder.Build(); string s = period.ToString(); Debug.WriteLine(s); // "PT10H130M10S"
string s=“PT10H130M10S”; PeriodPattern=PeriodPattern.RoundtripPattern; ParseResult=pattern.Parse; 如果(结果、成功) { 周期p=结果值; Debug.WriteLine(p.Hours);//10 Debug.WriteLine(p.Minutes);/130 Debug.WriteLine(p.Seconds);//10 }
Period.FromHours
返回10
和Period.FromMinutes
返回130
值?以及如何在期间
类中传递“PT10H130M10S”
字符串?我找不到任何Period
构造函数将string
作为野田时间文档中的参数。@SonerGönül-有关多部分Period
的一些示例用法,请参阅更新。干杯谢谢你,马特。例子看起来不错。
string s = "PT10H130M10S";
PeriodPattern pattern = PeriodPattern.RoundtripPattern;
ParseResult<Period> result = pattern.Parse(s);
if (result.Success)
{
Period p = result.Value;
Debug.WriteLine(p.Hours); // 10
Debug.WriteLine(p.Minutes); // 130
Debug.WriteLine(p.Seconds); // 10
}