简单案例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。
答案 0 :(得分:3)
你需要自定义代码,DateTime.TryParse不是正确的工具。看看时间跨度。这将解决你想要做的事情。但是你仍然需要检查>从.net 4.0开始的小时部分23。
// 23:0:0 23:00:00
// 24:0:0 Parse operation failed.
答案 1 :(得分:3)
假设它实际上是TimSpan
,并且您想要返回DateTime
(DateTime.Today + timespan
)。请注意,您无法通过TimeSpan
或ParseExact
创建超过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