输入值在字符串值中仅与此类似,而不是其他内容:P0DT3H40M0S
这表示旅行时间,需要转换为小时和分钟。
D表示日,T表示时间(右侧表示时间,上方样本为:3小时40分钟0秒.H小时,M分钟,S秒)
如果D中有值,例如。 P1DT3H40M0S
- 这已经表示1天3小时40分0秒,因此输出应为27小时40分钟。如何使用正则表达式获取天,小时和分钟的值?或者我可以使用子串吗?我的问题是如果有2位数的天和小时,子串将无法工作。我需要得到D,H和M的数字。
答案 0 :(得分:-1)
您可以使用TimeSpan.ParseExact将此字符串解析为TimeSpan
var pattern=@"\Pd\D\Th\Hm\Ms\S";
var ts = TimeSpan.ParseExact("P01DT3H40M0S",pattern,CultureInfo.InvariantCulture);
您可以在计算中使用TimeSpan对象。它支持加法,减法和比较。
您可以使用TotalHours以小时为单位提取总持续时间。在这种情况下,这将返回27.6666666
。您可以通过转换为int来获取整个小时,(int)ts.TotalHours
将返回27
。
Copying from one of Jon Skeet's answers您可以使用截断的TotalHours和Minutes,Seconds组件将字符串格式化为小时/分钟:
String.Format("{0}:{1}:{2}",(int)ts.TotalHours,ts.Minutes,ts.Seconds)
这将返回27:40:0