从长格式中获取时间

本文关键字:获取 取时间 格式 | 更新日期: 2023-09-27 18:24:45

我想从这种类型的字符串中计时

30-12-1899 14:32:54

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

但当我使用Substring时,会给我一个错误"索引和计数必须引用字符串中的一个位置。参数名称:count"

从长格式中获取时间

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

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

如果日期和月份部分也可以是个位数(例如"1-4-1899 14:32:54"),则提取空格字符后的部分可能更安全:

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

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

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

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

如果需要进一步的功能,可以将其转换为DateTime:

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

我建议您使用DateTime.ParseExact方法(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