如何使用DateTime C#解析[29:00:00 28:30:20 27:10:11 26:00:01 25:00:40]?

时间:2012-11-19 10:57:36

标签: c# datetime

简单案例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");

get error:字符串未被识别为有效的DateTime。

3 个答案:

答案 0 :(得分:3)

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

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

TimeSpan msdn

答案 1 :(得分:3)

假设它实际上是TimSpan,并且您想要返回DateTimeDateTime.Today + timespan)。请注意,您无法通过TimeSpanParseExact创建超过24小时的Parse。你需要这样做:

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;
}

答案 2 :(得分: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值,因此您需要提供日期和时间。上面的代码假定日期应该是今天,您可以忽略小时值是否大于23