Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Add hours and minutes from string into datetime

Tags:

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 is obviously of DateTime datatype.

I know I could break this string on : and use first part as hours and then convert that to double and then use AddHours, and I should repeat that for minutes also but I'm wonder is there convenient way to do this?

like image 337
user1765862 Avatar asked Mar 21 '17 08:03

user1765862


1 Answers

You can use TimeSpan.ParseExact:

myobj.StartTime = myobj.StartTime.Add(TimeSpan.ParseExact(date, "hh\\:mm", CultureInfo.InvariantCulture));

In hh\\:mm hh are hours (you cannot use HH here, not supported by this concrete method), mm are minutes, and \\: is escaped : character. One slash is to escape slash itself in C# literal string (otherwise you can do this: @"hh\:mm"), and you need to escape : with slash in format string, because otherwise TimeSpan.ParseExact will treat it as custom format specifier (like h), but there is no such format specifier and it will throw invalid format exception.

Note that if you also allow single-digit hours and minutes (like this: "1:2" or "1:25") - then you have to use another format:

TimeSpan.ParseExact(date, @"h\:m", CultureInfo.InvariantCulture);

This format will handle both single-digit and two-digit hours and minutes.

Also note that if you have more than 24 hours in your string (like "25:11") - this method will not work and you will have to fallback to split (as far as I know).

like image 172
Evk Avatar answered Oct 14 '22 12:10

Evk