string date = "17:25";
if(date.Lenght == 5){
myobj.StartTime = DateTime.ParseExact(date, "HH:mm", CultureInfo.InvariantCulture);
// add only hh and minutes and preserve day and year
}
else if(date.Lenght > 5){
myobj.StartTime = DateTime.ParseExact(date, "yyyy-MM-dd HH:mm", CultureInfo.InvariantCulture);
}
myobj.StartTime显然是DateTime
数据类型。
我知道我可以在:
上打破这个字符串并使用第一部分作为小时,然后将其转换为double然后使用AddHours,我也应该重复几分钟,但我不知道有没有方便的方法吗?
答案 0 :(得分:12)
您可以使用TimeSpan.ParseExact
:
myobj.StartTime = myobj.StartTime.Add(TimeSpan.ParseExact(date, "hh\\:mm", CultureInfo.InvariantCulture));
在hh\\:mm
hh
小时(您在此处不能使用HH
,此具体方法不支持),mm
为分钟,\\:
为转义:
字符。一个斜杠是在C#文字字符串中转义斜杠本身(否则你可以这样做:@"hh\:mm"
),你需要在格式字符串中用斜杠转义:
,否则TimeSpan.ParseExact
会对待它作为自定义格式说明符(如h
),但没有这样的格式说明符,它会抛出无效的格式异常。
请注意,如果您还允许一位数小时和分钟(例如:" 1:2"或" 1:25") - 那么您必须使用其他格式:
TimeSpan.ParseExact(date, @"h\:m", CultureInfo.InvariantCulture);
此格式将处理 一位数和两位数小时和分钟。
另请注意,如果你的字符串超过24小时(例如" 25:11") - 这种方法不起作用,你将不得不回退拆分(据我所知)