-4

简单案例1:

输入:

29:00:00 28:30:20 27:10:11 26:00:01 25:00:40 08:11:12 12:10:18 15:05:05

输出:

05:00:00 04:30:20 03:10:11 02:00:01 01:00:40 08:11:12 12:10:18 15:05:05

我的功能不起作用:

public static DateTime ParseDate(string s)
{
  DateTime result;
  if (!DateTime.TryParse(s, out result))
  {
    result = DateTime.ParseExact(s, "29:mm:ss", System.Globalization.CultureInfo.InvariantCulture);
    result = result.AddDays(1);
  }
  return result;
}

ParseDate("27:10:11");

得到错误:字符串未被识别为有效的日期时间。

4

3 回答 3

3

您需要为此自定义代码,DateTime.TryParse 不是正确的工具。看看时间跨度。这将解决您尝试做的任何事情。但是,从 .net 4.0 开始,您仍然需要在小时部分检查 > 23。

//                     23:0:0        23:00:00 
//                     24:0:0   Parse operation failed. 

时间跨度 msdn

于 2012-11-19T11:02:40.610 回答
3

假设它实际上是 aTimSpan并且您想要返回DateTime( DateTime.Today + timespan)。请注意,您不能创建超过 24 小时的过TimeSpan孔。你需要这样做:ParseParseExact

public static DateTime GetAddTimespan(string span)
{
    var tokens = span.Split(':');
    TimeSpan ts = new TimeSpan(
                  int.Parse(tokens[0]),    // hours
                  int.Parse(tokens[1]),    // minutes
                  int.Parse(tokens[2]));   // seconds)                              
    return DateTime.Today + ts;
}
于 2012-11-19T11:07:36.637 回答
1

您不能使用 DateTIme 执行此操作,因为它们不是有效的时间戳。你可以用 TimeSpan 做类似的事情

public static DateTime ParseDate(string s)
{
  var tokens = s.Split(':').Select(x => int.Parse(x));
  var now = DateTime.Now;
  return new DateTime(now.Year,
                      now.Month,
                      now.day,
                      tokens[0] % 24,
                      tokens[1],
                      tokens[2]);
}

这只是解析内容并确保小时值在 0 到 23 之间(都包括在内)。解析中没有错误处理,因此输入需要有效

由于您正在寻找 DAteTime 值,因此您需要提供日期和时间。上面的代码假定日期应该是今天,并且您可以 dsregard 小时值是否大于 23

于 2012-11-19T11:04:44.910 回答