将字符串中的小时和分钟添加到datetime

时间:2017-03-21 08:00:22

标签: c# .net datetime

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,我也应该重复几分钟,但我不知道有没有方便的方法吗?

1 个答案:

答案 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") - 这种方法不起作用,你将不得不回退拆分(据我所知)