对自定义字符串的时间求和

本文关键字:时间 求和 字符串 自定义 | 更新日期: 2023-09-27 18:16:19

我在网格中有一个时间字符串,如"0小时1分钟"。

现在我要计算时间的总和。

我可以使用下面的代码提取这个和字符串,

string timeValue = Regex.Replace(e.FieldValue.ToString(), "[^0-9]+", string.Empty);
DateTime d = DateTime.ParseExact(timeValue, "hhmm", CultureInfo.InvariantCulture);

但我无法将其转换为时间并将小时和分钟相加

请帮。

对自定义字符串的时间求和

如果您的字符串始终是该格式,您可以尝试使用模式和DateTime。TryParseExact

string timestring = "0 hours 1 minutes";
string pattern = "H' hours 'm' minutes'";
var dt = new DateTime();
if (DateTime.TryParseExact(timestring, pattern, CultureInfo.InvariantCulture,
            DateTimeStyles.None,
            out dt))
{
    //success
}
else
{
    //wrong input
}

您的代码不能工作,因为它期望小时和分钟各有两位数字。您可以使用正则表达式:

var timeString = "0 hours 1 minutes";
var regex = new Regex(@"^(?<hours>[0-9]+) hours (?<minutes>[0-9]+) minutes$");
var match = regex.Match(timeString);
if (!match.Success)
  // ... handle input error.
var hours = Int32.Parse(match.Groups["hours"].Value);
var minutes = Int32.Parse(match.Groups["minutes"].Value);
var timeSpan = TimeSpan.FromMinutes(60*hours + minutes);

结果是表示"H小时M分钟"的适当类型TimeSpan,而不是表示特定时间点的DateTime