从长格式中获取时间

时间:2012-02-14 10:35:29

标签: c# date time

我想从这个类型字符串中抽出时间

30-12-1899 14:32:54

string ReportTime = JobReportTime.Substring(9, 19);

但是当我使用Substring时给出错误“索引和计数必须引用字符串中的位置。 参数名称:count“

5 个答案:

答案 0 :(得分:4)

Substring的第一个参数是startIndex。在你的情况下,这将是:

string ReportTime = JobReportTime.Substring(11); // returns "14:32:54"

如果日期和月份部分也可以是单位数字(例如“1-4-1899 14:32:54”),那么在空格字符后提取部分可能更安全:

string ReportTime = JobReportTime.Substring(JobReportTime.IndexOf(' ') + 1);

答案 1 :(得分:0)

子串参数是起始位置和长度,而不是起始和结束索引。您可以使用.Substring(11, 8),但如果您没有指定长度,则Substring将返回字符串的其余部分,.Substring(11)将为您提供您所追求的内容。当然,您应该考虑将字符串解析为DateTime,然后像其他人所建议的那样提取时间信息。

答案 2 :(得分:0)

试试这个(编辑的最后一个答案)

 DateTime time = DateTime.Parse("30-12-1899 14:32:54");
 string ReportTIme = time.ToString("HH:mm:ss tt").ToString();  

答案 3 :(得分:0)

如果您需要更多功能,可以将其转换为DateTime:

var dt = Convert.ToDateTime("30-12-1899 14:32:54");
time = dt.TimeOfDay.ToString();
// returns "14:32:54"

答案 4 :(得分:0)

我建议你使用DateTime.ParseExact Method (String, String, IFormatProvider)

const string dateTimeFormat = "dd-MM-yyyy HH:mm:ss";
const string dateTimeString = "30-12-1899 14:32:54";
DateTime dateTime = DateTime.ParseExact(dateTimeString, dateTimeFormat, CultureInfo.InvariantCulture);
Console.WriteLine(dateTime.TimeOfDay);

我认为代码有点清晰:它指定了如何从字符串中明确地解析DateTime